1 | include "compiler.ma". |
---|
2 | include "Clight/Clight_classified_system.ma". |
---|
3 | include "Cminor/Cminor_classified_system.ma". |
---|
4 | include "RTLabs/RTLabs_classified_system.ma". |
---|
5 | include "joint/joint_fullexec.ma". |
---|
6 | include "RTL/RTL_semantics.ma". |
---|
7 | include "ERTL/ERTL_semantics.ma". |
---|
8 | include "LTL/LTL_semantics.ma". |
---|
9 | include "LIN/LIN_semantics.ma". |
---|
10 | include "ASM/Interpret2.ma". |
---|
11 | |
---|
12 | record preclassified_system_pass (P:pass) : Type[2] ≝ |
---|
13 | { pcs_pcs:> preclassified_system |
---|
14 | ; pcs_ok: syntax_of_pass P = program … pcs_pcs |
---|
15 | }. |
---|
16 | |
---|
17 | definition preclassified_system_of_pass: |
---|
18 | ∀pass. syntax_of_pass pass → preclassified_system_pass pass ≝ |
---|
19 | λpass. |
---|
20 | match pass return λpass.syntax_of_pass pass → preclassified_system_pass pass with |
---|
21 | [ clight_pass ⇒ λ_.mk_preclassified_system_pass … Clight_pcs … |
---|
22 | | clight_switch_removed_pass ⇒ λ_.mk_preclassified_system_pass … Clight_pcs … |
---|
23 | | clight_label_pass ⇒ λ_.mk_preclassified_system_pass … Clight_pcs … |
---|
24 | | clight_simplified_pass ⇒ λ_.mk_preclassified_system_pass … Clight_pcs … |
---|
25 | | cminor_pass ⇒ λ_.mk_preclassified_system_pass … Cminor_pcs … |
---|
26 | | rtlabs_pass ⇒ λ_.mk_preclassified_system_pass … RTLabs_pcs … |
---|
27 | | rtl_separate_pass ⇒ |
---|
28 | λ_.mk_preclassified_system_pass … (joint_preclassified_system RTL_semantics_separate) … |
---|
29 | | rtl_uniq_pass ⇒ |
---|
30 | λ_.mk_preclassified_system_pass … (joint_preclassified_system RTL_semantics_unique) … |
---|
31 | | ertl_pass ⇒ |
---|
32 | λ_.mk_preclassified_system_pass … (joint_preclassified_system ERTL_semantics) … |
---|
33 | | ltl_pass ⇒ |
---|
34 | λ_.mk_preclassified_system_pass … (joint_preclassified_system LTL_semantics) … |
---|
35 | | lin_pass ⇒ |
---|
36 | λ_.mk_preclassified_system_pass lin_pass (joint_preclassified_system LIN_semantics) ? |
---|
37 | | assembly_pass ⇒ |
---|
38 | λprog. let 〈code,sigma,policy〉 ≝ prog in |
---|
39 | mk_preclassified_system_pass … (ASM_preclassified_system code sigma policy) … |
---|
40 | | object_code_pass ⇒ |
---|
41 | λprog. mk_preclassified_system_pass ? (OC_preclassified_system prog) … |
---|
42 | ]. |
---|
43 | % |
---|
44 | qed. |
---|
45 | |
---|
46 | definition run_and_print: |
---|
47 | ∀pass'. syntax_of_pass pass' → nat → |
---|
48 | (pass → unit) → (intensional_event → unit) → (errmsg → unit) → (int → unit) → unit |
---|
49 | ≝ |
---|
50 | λpass,prog,n,print_pass,print_event,print_error,print_exit. |
---|
51 | let pcs ≝ preclassified_system_of_pass pass prog in |
---|
52 | let prog ≝ prog⌈syntax_of_pass pass ↦ ?⌉ in |
---|
53 | let g ≝ make_global … pcs prog in |
---|
54 | match make_initial_state … pcs prog with |
---|
55 | [ Error msg ⇒ print_error msg |
---|
56 | | OK s0 ⇒ |
---|
57 | let i ≝ print_pass pass in |
---|
58 | let 〈trace,res〉 ≝ observe_all_in_measurable n (pcs_to_cs pcs …) print_event [ ] s0 in |
---|
59 | match res with |
---|
60 | [ OK n ⇒ print_exit n |
---|
61 | | Error msg ⇒ print_error msg ]]. |
---|
62 | @pcs_ok |
---|
63 | qed. |
---|