COMPILER GPDefSyntaxAnalyzer CHARACTER SETS letter = 'A'..'Z' + 'a'..'z'. digit = '0'..'9'. whiteSpace = CHR(9) + EOL IGNORE. /* ' ' ignored by default */ COMMENTS FROM '/*' TO '*/' NESTED. KEYWORDS 'PROBLEM'. 'END'. 'EPS'. 'LOCAL'. 'NONTERMINALS'. 'RULES'. 'SEM'. 'MAXIMIZE'. 'MINIMIZE'. 'TERMINALS'. 'CONSTRAINTS'. 'INIT'. 'CODE'. 'IN'. 'SET'. 'RANGE'. TOKENS '='. '|'. '.'. '('. ')'. '['. ']'. '{'. '}'. '>>'. '..'. TOKEN CLASSES ident = letter {letter | digit}. PRAGMAS source = '<<' SEM <': GPDefSyntaxAnalyzerLex.NextCh(); if (GPDefSyntaxAnalyzerLex.curCh == '>') { GPDefSyntaxAnalyzerLex.curCh = ' '; // force GPDefSyntaxAnalyzerLex to get next character return; } break; default: GPDefSyntaxAnalyzerLex.NextCh(); break; } }>> . NONTERMINALS GPDefSyntaxAnalyzer. SemDecl. SemAction. NonterminalDecl. RuleDef. SynExpr. SynTerm. SynFact. TerminalDecl. ConstraintDef. ConstraintRule. SetDefinition. RULES GPDefSyntaxAnalyzer = 'PROBLEM' ident ['CODE' /* SourceText */] ['INIT' /* SourceText */] 'NONTERMINALS' { NonterminalDecl } 'TERMINALS' { TerminalDecl } 'RULES' { RuleDef } ('MAXIMIZE' | 'MINIMIZE') /* SourceText */ 'END' ident '.'. SemDecl = 'LOCAL' /* SourceText */ . SemAction = 'SEM' /* SourceText */ . NonterminalDecl = ident /* FormalAttrList */ '.' . TerminalDecl = ident /* FormalAttrList */ [ 'CONSTRAINTS' ConstraintDef ] '.' . ConstraintDef = { ConstraintRule }. ConstraintRule = ident 'IN' SetDefinition . SetDefinition = 'SET' /* SourceText */ | 'RANGE' /* SourceText */ '..' /* SourceText */ . RuleDef = ident /* FormalAttrList */ '=' [SemDecl] SynExpr '.' . SynExpr = SynTerm {'|' SynTerm} . SynTerm = SynFact {SynFact} . SynFact = ident /* ActualAttrList */ | 'EPS' | '(' SynExpr ')' | '[' SynExpr ']' | '{' SynExpr '}' | SemAction . END GPDefSyntaxAnalyzer.