module LESSON-12-A-SYNTAX
imports INT-SYNTAX
syntax Ints ::= List{Int,","}
endmodule
module LESSON-12-A
imports LESSON-12-A-SYNTAX
endmodule
module LESSON-12-B-SYNTAX
imports INT-SYNTAX
syntax Ints ::= Int "," Ints | ".Ints"
endmodule
module LESSON-12-B
imports LESSON-12-B-SYNTAX
endmodule
module LESSON-12-C
imports LESSON-12-A
imports INT
syntax Int ::= sum(Ints) [function]
rule sum(I:Int) => I
rule sum(I1:Int, I2:Int, Is:Ints) => sum(I1 +Int I2, Is)
endmodule
module LESSON-12-D
imports INT-SYNTAX
syntax Ints ::= #NonEmptyInts | #IntsTerminator
syntax #NonEmptyInts ::= Int "," #NonEmptyInts
| Int #IntsTerminator
syntax #IntsTerminator ::= ""
endmodule
module LESSON-12-E
syntax Id ::= r"[a-zA-Z_][a-zA-Z0-9_]*" [token]
syntax Exp ::= Id | Exp "(" Exps ")"
syntax Exps ::= List{Exp,","}
endmodule
module LESSON-12-F
syntax Id ::= r"[a-zA-Z_][a-zA-Z0-9_]*" [token]
syntax Exp ::= Id
syntax EnumSpecifier ::= "enum" Id "{" Ids "}"
syntax Ids ::= List{Id,","}
endmodule
module LESSON-12-G
syntax Id ::= r"[a-zA-Z_][a-zA-Z0-9_]*" [token]
syntax Exp ::= Id
syntax EnumSpecifier ::= "enum" Id "{" Ids "}"
syntax Ids ::= Id | Id "," Ids
endmodule