Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
07/19/13 00:31:12 (11 years ago)
Author:
gkronber
Message:

#2026 changed ATG to Coco/R syntax and use Coco/R (C#) to generate scanner and parser for GPDL

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.Problems.GPDL/SyntaxAnalyzer/GPDef.atg

    r9696 r9724  
     1$namespace=SyntaxAnalyzer
     2
    13COMPILER GPDefSyntaxAnalyzer
    24
    3 CHARACTER SETS
     5CHARACTERS
    46  letter = 'A'..'Z' + 'a'..'z'.
    57  digit = '0'..'9'.
    6   whiteSpace = CHR(9) + EOL IGNORE. /* ' ' ignored by default */
     8
     9TOKENS
     10  ident = letter {letter | digit} .
    711
    812COMMENTS
    9   FROM '/*' TO '*/' NESTED.
     13  FROM "/*" TO "*/" NESTED
    1014
    11 KEYWORDS
    12   'PROBLEM'. 'END'. 'EPS'.
    13   'LOCAL'. 'NONTERMINALS'. 'RULES'.
    14   'SEM'. 'MAXIMIZE'. 'MINIMIZE'. 'TERMINALS'. 'CONSTRAINTS'. 'INIT'. 'CODE'.
    15   'IN'. 'SET'. 'RANGE'.
     15IGNORE '\t' + '\r' + '\n'
    1616
    17 TOKENS
    18   '='. '|'. '.'. '('. ')'. '['. ']'. '{'. '}'. '>>'. '..'.
    19 
    20 TOKEN CLASSES
    21   ident = letter {letter | digit}.
    22 
    23 PRAGMAS
    24   source       = '<<' SEM <<for (; ; ) {
    25                               switch (GPDefSyntaxAnalyzerLex.curCh) {
    26                                 case Utils.EF:
    27                                   Errors.SemError(GPDefSyntaxAnalyzerLex.curLine, GPDefSyntaxAnalyzerLex.curCol, "end of file in source text");
    28                                   return;
    29                                 case '<':
    30                                   GPDefSyntaxAnalyzerLex.NextCh();
    31                                   if (GPDefSyntaxAnalyzerLex.curCh == '<') {
    32                                     Errors.Warning(GPDefSyntaxAnalyzerLex.curLine, GPDefSyntaxAnalyzerLex.curCol, "non closed source text before?");
    33                                     GPDefSyntaxAnalyzerLex.NextCh();
    34                                   }
    35                                   break;
    36                                 case '>':
    37                                   GPDefSyntaxAnalyzerLex.NextCh();
    38                                   if (GPDefSyntaxAnalyzerLex.curCh == '>') {
    39                                     GPDefSyntaxAnalyzerLex.curCh = ' ';          // force GPDefSyntaxAnalyzerLex to get next character
    40                                     return;
    41                                   }
    42                                   break;
    43                                 default:
    44                                   GPDefSyntaxAnalyzerLex.NextCh();
    45                                   break;
    46                               }
    47                             }>>
    48   .
    49 NONTERMINALS
    50   GPDefSyntaxAnalyzer.   
    51   SemDecl. SemAction. NonterminalDecl.
    52   RuleDef. SynExpr. SynTerm. SynFact. TerminalDecl.
    53   ConstraintDef. ConstraintRule. SetDefinition.
    54 
    55 RULES
     17PRODUCTIONS
    5618  GPDefSyntaxAnalyzer =
    57     'PROBLEM' ident
    58   ['CODE' /* SourceText */]
    59   ['INIT' /* SourceText */]
    60     'NONTERMINALS' { NonterminalDecl }
    61     'TERMINALS' { TerminalDecl }
    62     'RULES' { RuleDef }
    63     ('MAXIMIZE' | 'MINIMIZE') /* SourceText */
    64     'END' ident '.'.
     19    "PROBLEM" ident
     20    ["CODE" "<<" {ANY} ">>" ]
     21    ["INIT" "<<" {ANY} ">>" ]
     22    "NONTERMINALS" { NonterminalDecl }
     23    "TERMINALS" { TerminalDecl }
     24    "RULES" { RuleDef }
     25    ("MAXIMIZE" | "MINIMIZE") "<<" {ANY} ">>"
     26    "END" ident '.'.
    6527
    6628
    67   SemDecl = 'LOCAL' /* SourceText */
     29  SemDecl = "LOCAL" "<<" {ANY} ">>"
    6830  .
    6931
    70   SemAction = 'SEM' /* SourceText */
     32  SemAction = "SEM" "<<" {ANY} ">>"
    7133  .
    7234
    73   NonterminalDecl = ident /* FormalAttrList */ '.'
     35  NonterminalDecl = ident "<<" {ANY} ">>" '.'
    7436  .
    7537
    76   TerminalDecl = ident /* FormalAttrList */
    77     [ 'CONSTRAINTS' ConstraintDef ]
     38  TerminalDecl = ident "<<" {ANY} ">>"
     39    [ "CONSTRAINTS" ConstraintDef ]
    7840    '.'
    7941  .
    8042
    8143  ConstraintDef = { ConstraintRule }.
    82   ConstraintRule = ident 'IN' SetDefinition .
     44  ConstraintRule = ident "IN" SetDefinition .
    8345  SetDefinition =
    84     'SET' /* SourceText */
    85     | 'RANGE' /* SourceText */ '..' /* SourceText */
     46    "SET" "<<" {ANY} ">>"
     47    | "RANGE" "<<" {ANY} ">>" ".." "<<" {ANY} ">>"
    8648  .
    8749
    88   RuleDef = ident /* FormalAttrList */ '=' [SemDecl] SynExpr '.'
     50  RuleDef = ident "<<" {ANY} ">>" '=' [SemDecl] SynExpr '.'
    8951  .
    9052
    91   SynExpr = SynTerm {'|' SynTerm}
     53  SynExpr = SynTerm { '|' SynTerm }
    9254  .
    9355
    94   SynTerm = SynFact {SynFact}
     56  SynTerm = SynFact { SynFact }
    9557  .
    9658
    9759  SynFact =
    98     ident /* ActualAttrList */
    99     | 'EPS'
     60    ident "<<" {ANY} ">>"
     61    | "EPS"
    10062    | '(' SynExpr ')'
    10163    | '[' SynExpr ']'
Note: See TracChangeset for help on using the changeset viewer.