Eric Streit 3d3772c7e5 Oberon-07 validator pilot (grammar, build, tests) 4 ngày trước cách đây
..
tests 3d3772c7e5 Oberon-07 validator pilot (grammar, build, tests) 4 ngày trước cách đây
README.md 3d3772c7e5 Oberon-07 validator pilot (grammar, build, tests) 4 ngày trước cách đây
build.sh 3d3772c7e5 Oberon-07 validator pilot (grammar, build, tests) 4 ngày trước cách đây
oberon07_oberon.atg 3d3772c7e5 Oberon-07 validator pilot (grammar, build, tests) 4 ngày trước cách đây

README.md

Oberon-07 validator pilot

oberon07_oberon.atg is the installed Oberon-07 grammar plus 5 fixes needed to build a working validator with Coco/R V1.53 (CR) and GNU Modula-2 (gm2 -fiso), all diagnosed against voc as oracle:

  1. statement: assignment | ProcedureCall factored into AssignmentOrProcedureCall (the unfactored form generated duplicate CASE labels — uncompilable parser).
  2. designator: dropped "(" qualident ")" (hijacked call parens; Out.String("hi") failed with ident expected).
  3. qualident: [ ident "." ] ident rewritten as ident { "." ident } (optional-prefix lookahead trap; same rewrite the M2 grammar uses).
  4. real requires post-dot digits + CONTEXT ("..") on integers (the 2..3 lexer trap; same as the M2 grammar's documented fix).
  5. Added ForStatement (voc accepts FOR as an extension although strict Oberon-07 dropped it; without it every FOR loop is a false positive).

Two benign LL(1) warnings remain (DeclarationSequence PROCEDURE conflict, qualident dot conflict); the differential below shows they do not bite real code.

Build

./build.sh        # -> build/O07 (build/ is git-ignored)

Needs CR (Coco/R), gm2 -fiso, the parser.frm/scanner.frm frames and FileIO.def/.mod — all resolved from the environment with sensible defaults (CRFRAMES, M2LIB, CR, GM2).

Differential results (O07 vs voc)

23 accept probes + tests/deep.Mod (records, pointers, nested recursion, multidim arrays, procedure types, CASE ranges, hex/reals): 0 false positives. 8 broken mutants: 0 missed, positions within ~3 columns. voc quirks found on the way: bare WITH fields rejected (only qualified p.x accepted); FOR accepted as an extension; module END-name mismatch unreported by O07 (accepted gap).