codingOL

PseudoC grammar (.gram)

Jul 22nd, 2012
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.07 KB | None | 0 0
  1. public cf text grammar pseudo_c
  2. {
  3. options
  4. {
  5. Axiom = "IMPORT_STMT";
  6. Separator = "SEPARATOR";
  7. }
  8. terminals {
  9. LETTER -> [a-z] | [A-Z] ;
  10. LETTERS -> LETTER+ ;
  11. NUMBER -> [0-9] ;
  12. NUMBERS -> NUMBER+ ;
  13. ALPHANUMS -> (LETTER | NUMBER)+ ;
  14. ASCII_VAL -> ALPHANUMS | 0x003A .. 0x003F | 0x005B .. 0x005F ;
  15. ASCII_LIST -> ASCII_VAL+ ;
  16. NEWLINE -> '\n' ;
  17. ESCAPE_CHR -> NEWLINE | '\\' | '\'' | '\a' | '\b' ;
  18. CHAR -> ASCII_VAL | ESCAPE_CHR ;
  19. CHARS -> CHAR+ ;
  20.  
  21. CONSTANT_ID -> LETTERS ALPHANUMS ;
  22. SIGN -> 0x002B | 0x002D ;
  23. INTEGER -> (SIGN) (NUMBERS) | NUMBERS ;
  24. DECIMAL_NUM -> NUMBERS '.' NUMBERS | NUMBERS '.' | '.' NUMBERS ;
  25. FLOAT -> DECIMAL_NUM ;
  26. CHARVAL -> 0x0027 LETTER 0x0027 | 0x0027 LETTER 0x0027 ;
  27. STRING -> 0x0022 ASCII_LIST 0x0022 ;
  28. CONST_VALUE -> INTEGER | FLOAT | CHARVAL | STRING ;
  29.  
  30. EXT -> 'hd' ;
  31. FILE -> CHARS '.' EXT ;
  32.  
  33. SCANNER_TYPE -> 'scanInt' | 'scanDecimal' | 'scanString' ;
  34.  
  35. DATA_TYPE -> 'int' | 'float' | 'char' | 'String' ;
  36. ARRAY_INDEX -> 0x005B NUMBERS 0x005D ;
  37. VAR_ID -> LETTER ALPHANUMS ARRAY_INDEX | LETTER ALPHANUMS ;
  38.  
  39. BOOLEAN_ID -> VAR_ID ;
  40. STRING_ID -> VAR_ID ;
  41. NUMBER_ID -> VAR_ID ;
  42.  
  43. RELATION_OP -> 'is equal to' | 'is not equal to' | 'less than' | 'greater than' | 'less than or equal to' | 'greater than or equal to' ;
  44.  
  45. WHITE_SPACE -> 0x0020 | 0x0009 | 0x000B | 0x000C ;
  46. SEPARATOR -> (WHITE_SPACE | NEWLINE)+ ;
  47.  
  48. }
  49. rules {
  50. IMPORT_STMT -> 'using' FILE ';' '\n' {OnRule};
  51. IMPORTS -> IMPORT_STMT+ {OnRule};
  52.  
  53. STRING_EXPR -> 'not ->' STRING {OnRule}| STRING_ID {OnRule}| STRING {OnRule};
  54. STRING_EXPR_AUX -> STRING_ID '+' STRING_EXPR {OnRule}| STRING '+' STRING_EXPR {OnRule};
  55.  
  56. INCREMENT_POST -> VAR_ID'++' {OnRule};
  57. DECREMENT_POST -> VAR_ID'--' {OnRule};
  58. INCREMENT_PRE -> '++'VAR_ID {OnRule};
  59. DECREMENT_PRE -> '--'VAR_ID {OnRule};
  60.  
  61. N_FCTR -> CHAR {OnRule}| INTEGER {OnRule}| FLOAT {OnRule}| NUMBER_ID {OnRule};
  62. N_TERM -> N_FCTR {OnRule};
  63. N_TERM_AUX -> N_FCTR '*' N_TERM {OnRule}| N_FCTR '/' N_TERM {OnRule}| N_FCTR 'mod' N_TERM {OnRule};
  64. NUMBER_EXPR -> N_TERM {OnRule};
  65. NUMBER_EXPR_AUX -> N_TERM '+' NUMBER_EXPR {OnRule}| N_TERM '-' NUMBER_EXPR {OnRule};
  66. N_PARENTH_FCTR -> '0x0028' NUMBER_EXPR_AUX '0x0029' {OnRule}| '0x0028' NUMBER_EXPR '0x0029' {OnRule};
  67.  
  68. BOOLEAN_FCTR -> BOOLEAN_ID {OnRule};
  69. BOOLEAN_TERM -> BOOLEAN_FCTR {OnRule};
  70. BOOLEAN_TERM_AUX -> BOOLEAN_FCTR 'and' BOOLEAN_TERM {OnRule} ;
  71. LOGICAL_BOOL -> BOOLEAN_TERM_AUX {OnRule}| BOOLEAN_TERM {OnRule} ;
  72. LOGICAL_BOOL_AUX -> BOOLEAN_TERM 'or' LOGICAL_BOOL {OnRule};
  73. BOOLEAN_EXPR -> NUMBER_EXPR RELATION_OP NUMBER_EXPR {OnRule}| STRING_EXPR 'is' 'equal' 'to' STRING_EXPR {OnRule}| STRING_EXPR 'is' 'not' 'equal' 'to' STRING_EXPR {OnRule}| LOGICAL_BOOL {OnRule}| LOGICAL_BOOL_AUX {OnRule};
  74. BOOLEAN_EXPR_AUX -> LOGICAL_BOOL 'is' 'equal' 'to' BOOLEAN_EXPR {OnRule}| LOGICAL_BOOL 'is' 'not' 'equal' 'to' BOOLEAN_EXPR {OnRule};
  75. BOOLEAN_FCTR_AUX -> '0x0028' LOGICAL_BOOL '0x0029' {OnRule}| '0x0028' LOGICAL_BOOL_AUX '0x0029' {OnRule}| 'not ->' LOGICAL_BOOL {OnRule} | 'not ->' LOGICAL_BOOL_AUX {OnRule};
  76.  
  77. EXPR -> STRING_EXPR {OnRule} | NUMBER_EXPR {OnRule} | BOOLEAN_EXPR {OnRule} | RETFUNCT_NAME '(' PARAM_VAL ')' ';' {OnRule} ;
  78.  
  79. VAR_ID_LIST -> VAR_ID {OnRule} | (VAR_ID ',')+ {OnRule} ;
  80. DECLARE_VAR -> DATA_TYPE VAR_ID_LIST {OnRule} ;
  81. VAR_DECLS -> DECLARE_VAR ';' {OnRule} ;
  82. VAR_DECLS_AUX -> DECLARE_VAR ';' VAR_DECLS {OnRule} ;
  83.  
  84. ASSIGN_STMT -> VAR_ID 'equal' 'to' EXPR ';' {OnRule} ;
  85.  
  86. RET_STMT -> 'return' EXPR ';' {OnRule} ;
  87.  
  88. IF_STMT -> 'when' '<' BOOLEAN_EXPR '>' 'do' STMT {OnRule} | 'when' '<' BOOLEAN_EXPR '>' 'do' STMT 'or' 'else' STMT {OnRule} ;
  89.  
  90. DEFAULT -> 'when' 'default' 'do' STMT_ENUM {OnRule} ;
  91. CASES -> 'case' EXPR 'do' STMT_ENUM {OnRule} ;
  92. CASE_AUX -> 'case' EXPR 'do' STMT_ENUM CASES* {OnRule} ;
  93. SWITCH_STMT -> 'using' '<' EXPR '>' 'and' 'with' '{' CASE_AUX DEFAULT '}' {OnRule} | 'using' '<' EXPR '>' 'and' 'with' '{' CASES DEFAULT '}' {OnRule} | 'using' '<' EXPR '>' 'and' 'with' '{' DEFAULT '}' {OnRule} | 'using' '<' EXPR '>' 'and' 'with' '{' CASE_AUX '}' {OnRule} ;
  94.  
  95. WHILE_LOOP -> 'as' 'long' 'as' '<' BOOLEAN_EXPR '>' 'do' STMT {OnRule} ;
  96. DO_WHILE_LOOP -> 'perform' STMT 'as' 'long' 'as' '<' BOOLEAN_EXPR '>' ';' {OnRule} ;
  97. FOR_LOOP -> 'where' ASSIGN_STMT 'until' BOOLEAN_EXPR 'and' ASSIGN_STMT 'do' STMT {OnRule} ;
  98.  
  99. INPUT_STMT -> SCANNER_TYPE '(' VAR_ID ')' ';' {OnRule} ;
  100.  
  101. OUT_STREAM -> '0x0022' CHARS '0x0022' {OnRule} | VAR_ID {OnRule} | EXPR {OnRule} | CONSTANT_ID {OnRule} | FUNCT_NAME '(' PARAM_VAL ')' {OnRule} ;
  102. OUTPUT_STMT -> 'printing' '(' OUT_STREAM ')' ';' {OnRule} ;
  103.  
  104. STMT -> ASSIGN_STMT {OnRule} | IF_STMT {OnRule} | RET_STMT {OnRule} | SWITCH_STMT {OnRule} | WHILE_LOOP {OnRule} | DO_WHILE_LOOP {OnRule} | INPUT_STMT {OnRule} | OUTPUT_STMT {OnRule} | FOR_LOOP {OnRule} | '{' STMT_ENUM '}' {OnRule} | 'break' ';' {OnRule} | 'continue' ';' {OnRule} ;
  105.  
  106. FUNCTION -> '{' VAR_DECLS_AUX STMT_ENUM '}' {OnRule} ;
  107. PARAMETER -> DATA_TYPE DECLARE_VAR {OnRule} ;
  108. PARAM_LIST -> PARAMETER {OnRule}| (PARAMETER ',')+ {OnRule} ;
  109. FUNCT_NAME -> LETTERS {OnRule} ;
  110. RETFUNCT_NAME -> FUNCT_NAME {OnRule} ;
  111.  
  112. NONRET_FUNCT -> 'void' FUNCT_NAME '(' PARAM_LIST ')' FUNCTION {OnRule} | 'void' FUNCT_NAME '(' ')' FUNCTION {OnRule} ;
  113. RET_FUNCTION -> DATA_TYPE RETFUNCT_NAME '(' PARAM_LIST ')' FUNCTION {OnRule} | DATA_TYPE RETFUNCT_NAME '(' ')' FUNCTION {OnRule} ;
  114.  
  115. DECLARE_FUNCT -> RET_FUNCTION {OnRule} | NONRET_FUNCT {OnRule} ;
  116. FUNCTS -> DECLARE_FUNCT {OnRule} ;
  117. FUNCTS_AUX -> DECLARE_FUNCT FUNCTS+ {OnRule} ;
  118.  
  119. CALL_FUNCT -> FUNCT_NAME '(' PARAM_VAL ')' ';' {OnRule} ;
  120. PARAM_VAL -> REAL_PARAM {OnRule} ;
  121. REAL_PARAM -> VAR_ID | (VAR_ID ',')+ {OnRule} ;
  122.  
  123. STMT_AUX -> CALL_FUNCT {OnRule} | STMT {OnRule} ;
  124. STMT_ENUM -> STMT_AUX+ {OnRule} ;
  125.  
  126. MAIN -> 'void' 'main' '(' ')' {OnRule} FUNCTION {OnRule} ;
  127. }
  128. }
Advertisement
Add Comment
Please, Sign In to add comment