Created
February 24, 2013 07:29
-
-
Save libbkmz/5023020 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* | |
| * To change this template, choose Tools | Templates | |
| * and open the template in the editor. | |
| */ | |
| grammar libbkmzgrammar; | |
| options { | |
| k=1; // Only 1 lookahead character required | |
| } | |
| tokens { | |
| /*PLUS = '+' ; | |
| MINUS = '-' ; | |
| MULT = '*' ; | |
| DIV = '/' ;*/ | |
| } | |
| /*------------------------------------------------------------------ | |
| * PARSER RULES | |
| *------------------------------------------------------------------*/ | |
| /*expr : term ( ( PLUS | MINUS ) term )* ; | |
| term : factor ( ( MULT | DIV ) factor )* ; | |
| factor : DIGIT ;*/ | |
| /*------------------------------------------------------------------ | |
| * LEXER RULES | |
| *------------------------------------------------------------------*/ | |
| /* TODO: Case insensetive!!! */ | |
| //KEYWORDS: | |
| fragment VAR : 'var'; | |
| fragment IMPLEMENTATION | |
| : 'implementation'; | |
| fragment INT_TYPE | |
| : 'int'; | |
| fragment REAL_TYPE | |
| : 'real'; | |
| fragment BREAK | |
| : 'break'; | |
| fragment GOTO | |
| : 'goto'; | |
| fragment READ | |
| : 'read'; | |
| fragment WRITE | |
| : 'write'; | |
| fragment SKIP | |
| : 'skip'; | |
| fragment SPACE | |
| : 'space'; | |
| fragment TAB | |
| : 'tab'; | |
| fragment LOOP | |
| : 'loop'; | |
| /*Идентификатор, буква и цифра*/ | |
| ID : CHAR (CHAR | DIGIT)*; | |
| CHAR : ('a'..'z'|'A'..'Z'); | |
| DIGIT : ('0'..'9'); | |
| /* TODO: Comments!!! */ | |
| LABEL : LABEL_NAME ':'; | |
| LABEL_NAME | |
| : UINT; | |
| UINT : (BINARY|OCTAL|DECIMAL|HEX); | |
| BINARY : '2#' ('0'|'1')+; | |
| OCTAL : '8#' ('0'..'7')+; | |
| DECIMAL : '10#'? (DIGIT)+; | |
| HEX : '16#' (DIGIT|'a'..'z'|'A'..'Z')+; | |
| NUMERIC_STR | |
| : DIGIT+; | |
| EXPONENT : ('E'|'e') ('+'|'-')? NUMERIC_STR; | |
| REAL : (NUMERIC_STR EXPONENT) | |
| | (NUMERIC_STR '.' NUMERIC_STR? EXPONENT?) | |
| | ( '.' NUMERIC_STR EXPONENT?); | |
| PROGRAM : (VAR DESCRIPTION (';' DESCRIPTION)* )? (IMPLEMENTATION PROCEDURE (';' PROCEDURE)* )? | |
| ('{' STATEMENT (';' STATEMENT)* '}'); | |
| MULTIPLY | |
| : '{' STATEMENT (';' STATEMENT )* '}'; | |
| DESCRIPTION | |
| : TYPE ID ('[' UINT ']')? (',' ID ('[' UINT ']')?)*; | |
| TYPE : INT_TYPE|REAL_TYPE; | |
| STATEMENT : LABEL? UNMARKED; | |
| UNMARKED | |
| : MULTIPLY|ASSIGNMENT|TRANSITION|CONDITIONAL|CYCLE|EMPTY|INPUT|OUTPUT|CALL|BREAK; | |
| EMPTY : ; | |
| TRANSITION : GOTO LABEL_NAME; | |
| INPUT : READ VARIABLE (',' VARIABLE)*; | |
| OUTPUT : WRITE (EXPRESSION|QUALIFIER) (',' (EXPRESSION|QUALIFIER) )*?; | |
| VARIABLE : ID ('[' INDEX ']' )?; | |
| INDEX : ID|UINT; | |
| QUALIFIER : SKIP|SPACE|TAB; | |
| ASSIGNMENT | |
| : VARIABLE '=' VARIABLE; | |
| EXPRESSION | |
| : SUMMAND (('=='|'!='|'<'|'>'|'<='|'>=') SUMMAND)*; | |
| SUMMAND : FACTOR (('+'|'-') FACTOR)*; | |
| FACTOR : UNARY (('*'|'/'|'%') UNARY)*; | |
| UNARY : '-'? TERM; | |
| TERM : VARIABLE|NUMBER|('(' EXPRESSION ')'); | |
| NUMBER : UINT|REAL; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment