?? pimmod2.atg
字號:
COMPILER Mod2
/* COCO/R Grammar for Modula-2 based on "Programming in Modula-2 */
CHARACTERS
eol = CHR(10) .
letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" .
octDigit = "01234567" .
digit = octDigit + '89' .
hexDigit = digit + 'ABCDEF' .
noQuote1 = ANY - "'" - eol .
noQuote2 = ANY - '"' - eol .
IGNORE CHR(9).. CHR(13)
COMMENTS
FROM '(*' TO '*)' NESTED
TOKENS
ident = letter { letter | digit } .
integer = digit { digit }
| digit { digit } CONTEXT ("..")
| octDigit { octDigit } ("B" | "C")
| digit { hexDigit } "H" .
real = digit { digit } "." { digit }
[ "E" [ "+" | "-" ] digit { digit } ] .
string = "'" { noQuote1 } "'"
| '"' { noQuote2 } '"' .
PRODUCTIONS
Mod2 = DefinitionModule | [ "IMPLEMENTATION" ] ProgramModule .
Number = integer | real .
QualIdent = ident { "." ident } .
ConstantDeclaration = ident "=" ConstExpression .
ConstExpression = Expression .
TypeDeclaration = ident "=" Type .
Type = SimpleType | ArrayType | RecordType | SetType
| PointerType | ProcedureType .
SimpleType = QualIdent | Enumeration | SubrangeType .
Enumeration = "(" IdentList ")" .
IdentList = ident { "," ident } .
SubrangeType = [ ident ] "[" ConstExpression ".." ConstExpression "]" .
ArrayType = "ARRAY" SimpleType { "," SimpleType } "OF" Type .
RecordType = "RECORD" FieldListSequence "END" .
FieldListSequence = FieldList { ";" FieldList } .
FieldList = [ IdentList ":" Type
| "CASE" [ ident ] ":" QualIdent "OF"
Variant { "|" Variant }
[ "ELSE" FieldListSequence ] "END" ] .
Variant = [ CaseLabelList ":" FieldListSequence ] .
CaseLabelList = CaseLabels { "," CaseLabels } .
CaseLabels = ConstExpression [ ".." ConstExpression ] .
SetType = "SET" "OF" SimpleType .
PointerType = "POINTER" "TO" Type .
ProcedureType = "PROCEDURE" [ FormalTypeList ] .
FormalTypeList = "(" [ [ "VAR" ] FormalType
{ "," [ "VAR" ] FormalType } ] ")" [ ":" QualIdent ] .
VariableDeclaration = IdentList ":" Type .
Designator = QualIdent { "." ident | "[" ExpList "]" | "^" } .
ExpList = Expression { "," Expression } .
Expression = SimpleExpression [ Relation SimpleExpression ] .
Relation = "=" | "#" | "<" |"<=" | ">" | ">=" | "IN" .
SimpleExpression = [ "+" | "-" ] Term { AddOperator Term } .
AddOperator = "+" | "-" | "OR" .
Term = Factor { MulOperator Factor } .
MulOperator = "*" |"/" | "DIV" | "MOD" | "AND" .
Factor = Number | string | Set | "NOT" Factor
| Designator [ ActualParameters ]
| "(" Expression ")" .
Set = [ QualIdent ] "{" [ Element { "," Element } ] "}" .
Element = Expression [ ".." Expression ] .
ActualParameters = "(" [ ExpList ] ")" .
Statement = [ Assignment | ProcedureCall | IfStatement
| CaseStatement | WhileStatement | RepeatStatement
| LoopStatement | ForStatement | WithStatement
| "EXIT" | "RETURN" [ Expression ] ] .
Assignment = Designator ":=" Expression .
ProcedureCall = Designator [ ActualParameters ] .
StatementSequence = Statement { ";" Statement } .
IfStatement = "IF" Expression "THEN" StatementSequence
{ "ELSIF" Expression "THEN" StatementSequence }
[ "ELSE" StatementSequence ] "END" .
CaseStatement = "CASE" Expression "OF" Case { "|" Case }
[ "ELSE" StatementSequence ] "END" .
Case = [ CaseLabelList ":" StatementSequence ] .
WhileStatement = "WHILE" Expression "DO" StatementSequence "END" .
RepeatStatement = "REPEAT" StatementSequence "UNTIL" Expression .
ForStatement = "FOR" ident ":=" Expression "TO" Expression
[ "BY" ConstExpression ] "DO" StatementSequence "END" .
LoopStatement = "LOOP" StatementSequence "END" .
WithStatement = "WITH" Designator "DO" StatementSequence "END" .
ProcedureDeclaration = ProcedureHeading ";" Block ident .
ProcedureHeading = "PROCEDURE" ident [ FormalParameters ] .
Block = { Declaration } [ "BEGIN" StatementSequence ] "END" .
Declaration = "CONST" { ConstantDeclaration ";" }
| "TYPE" { TypeDeclaration ";" }
| "VAR" { VariableDeclaration ";" }
| ProcedureDeclaration ";"
| ModuleDeclaration ";" .
FormalParameters = "(" [ FPSection { ";" FPSection } ] ")"
[ ":" QualIdent ] .
FPSection = [ "VAR" ] IdentList ":" FormalType .
FormalType = [ "ARRAY" "OF" ] QualIdent .
ModuleDeclaration = "MODULE" ident [ Priority ] ";"
[ Import ] [ Export ] Block ident .
Priority = "[" ConstExpression "]" .
Export = "EXPORT" [ "QUALIFIED" ] IdentList ";" .
Import = [ "FROM" ident ] "IMPORT" IdentList ";" .
DefinitionModule = "DEFINITION" "MODULE" ident ";"
{ Import } { Definition } "END" ident "." .
Definition = "CONST" { ConstantDeclaration ";" } |
| "TYPE" { ident [ "=" Type ] ";" }
| "VAR" { VariableDeclaration ";" }
| ProcedureHeading ";" .
ProgramModule = "MODULE" ident [ Priority ] ";"
{ Import } Block ident "." .
END Mod2.
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -