$namespace=SyntaxAnalyzer COMPILER GPDefSyntaxAnalyzer CHARACTERS letter = 'A'..'Z' + 'a'..'z'. digit = '0'..'9'. TOKENS ident = letter {letter | digit} . COMMENTS FROM "/*" TO "*/" NESTED IGNORE '\t' + '\r' + '\n' PRODUCTIONS GPDefSyntaxAnalyzer = "PROBLEM" ident ["CODE" "<<" {ANY} ">>" ] ["INIT" "<<" {ANY} ">>" ] "NONTERMINALS" { NonterminalDecl } "TERMINALS" { TerminalDecl } "RULES" { RuleDef } ("MAXIMIZE" | "MINIMIZE") "<<" {ANY} ">>" "END" ident '.'. SemDecl = "LOCAL" "<<" {ANY} ">>" . SemAction = "SEM" "<<" {ANY} ">>" . NonterminalDecl = ident "<<" {ANY} ">>" '.' . TerminalDecl = ident "<<" {ANY} ">>" [ "CONSTRAINTS" ConstraintDef ] '.' . ConstraintDef = { ConstraintRule }. ConstraintRule = ident "IN" SetDefinition . SetDefinition = "SET" "<<" {ANY} ">>" | "RANGE" "<<" {ANY} ">>" ".." "<<" {ANY} ">>" . RuleDef = ident "<<" {ANY} ">>" '=' [SemDecl] SynExpr '.' . SynExpr = SynTerm { '|' SynTerm } . SynTerm = SynFact { SynFact } . SynFact = ident "<<" {ANY} ">>" | "EPS" | '(' SynExpr ')' | '[' SynExpr ']' | '{' SynExpr '}' | SemAction . END GPDefSyntaxAnalyzer.