Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- SCANNER oberon_scan
- PARSER oberon_pars
- GLOBAL {
- # include <stdio.h>
- # include <math.h>
- }
- PREC LEFT '=' '#' '<' '<=' '>' '>=' 'IN' 'IS'
- LEFT '+' '-' 'OR'
- LEFT '*' '/' 'DIV' 'MOD' '&'
- NONE '~' UNARY
- RULE
- root = module .
- identdef = <
- = tok_identifier '*'
- .
- = tok_identifier
- .
- > . /* identdef */
- qualident = <
- = tok_identifier '.' tok_identifier
- .
- = tok_identifier
- .
- > . /* qualident */
- number = <
- = int_const
- .
- = real_const
- .
- > . /* number */
- /**********************************************************************/
- /**********************************************************************/
- /**********************************************************************/
- expression = <
- = expression '=' expression
- .
- = expression '#' expression
- .
- = expression '<' expression
- .
- = expression '<=' expression
- .
- = expression '>' expression
- .
- = expression '>=' expression
- .
- = expression 'IN' expression
- .
- = expression 'IS' expression
- .
- = expression '+' expression
- .
- = expression '-' expression
- .
- = expression 'OR' expression
- .
- = expression '*' expression
- .
- = expression '/' expression
- .
- = expression 'DIV' expression
- .
- = expression 'MOD' expression
- .
- = expression '&' expression
- .
- = '~' expression PREC UNARY
- .
- = '+' expression PREC UNARY
- .
- = '-' expression PREC UNARY
- .
- = '(' expression ')'
- .
- = set
- .
- = designator
- .
- = procedureCall
- .
- = number
- .
- = char_const
- .
- = string_const
- .
- = 'NIL'
- .
- > . /* expression */
- const_expression = expression.
- expression_ls = <
- = expression
- .
- = expression_ls ',' expression
- .
- > . /* expression_ls */
- const_expression_ls = <
- = const_expression
- .
- = const_expression_ls ',' const_expression
- .
- > . /* expression_ls */
- const_expression_range = <
- = const_expression
- .
- = const_expression_range '..' const_expression
- .
- > . /* const_expression_range */
- designator = <
- = tok_identifier
- .
- = designator '.' tok_identifier
- .
- = designator '(' expression_ls ')'
- .
- = designator '(' ')'
- .
- = designator '[' expression_ls ']'
- .
- = designator '^'
- .
- > . /* designator */
- set = '{' element_ls '}' .
- element_ls = <
- = /* epsilon */
- .
- element_s = <
- = element
- .
- = element_s ',' element
- .
- > . /* element_s */
- >. /* element_ls */
- element = <
- = expression
- .
- = expression '..' expression
- .
- > . /* element */
- /**********************************************************************/
- /**********************************************************************/
- /**********************************************************************/
- type = <
- = qualident
- .
- = arrayType
- .
- = recordType
- .
- = pointerType
- .
- = procedureType
- .
- > . /* type */
- arrayType = <
- = 'ARRAY' const_expression_ls 'OF' type
- .
- > . /* arrayType */
- recordType = <
- = 'RECORD' fieldListSequence 'END'
- .
- = 'RECORD' qualident fieldListSequence 'END'
- .
- > . /* arrayType */
- pointerType = <
- = 'POINTER' 'TO' type
- .
- > . /* pointerType */
- procedureType = <
- = 'PROCEDURE'
- .
- = 'PROCEDURE' formalParameters
- .
- > . /* procedureType */
- fieldListSequence = <
- = fieldList
- .
- = fieldList ';' fieldListSequence
- .
- > . /* fieldListSequence */
- fieldList = <
- = /* epsilon */
- .
- = identList ':' type
- .
- >. /* fieldList */
- identList = <
- = identdef
- .
- = identdef ',' identList
- .
- >. /* identList */
- formalParameters = <
- = '(' fpSection_ls ')'
- .
- = '(' fpSection_ls ')' ':' qualident
- .
- > . /* formalParameters */
- fpSection_ls = <
- = /* epsilon */
- .
- fpSection_s = <
- = fpSection
- .
- = fpSection ';' fpSection_ls
- .
- > . /* fpSection_s */
- > . /* fpSection_ls */
- fpSection = <
- = 'VAR' ident_ls ':' formalType
- .
- = ident_ls ':' formalType
- .
- > . /* fpSection */
- ident_ls = <
- = tok_identifier
- .
- = tok_identifier ',' ident_ls
- .
- > . /* ident_ls */
- formalType = <
- = 'ARRAY' 'OF' formalType
- .
- = qualident
- .
- = procedureType
- .
- > . /* formalType */
- /**********************************************************************/
- /**********************************************************************/
- /**********************************************************************/
- statement = <
- = assignment
- .
- = procedureCall
- .
- = ifStatement
- .
- = caseStatement
- .
- = whileStatement
- .
- = repeatStatement
- .
- = loopStatement
- .
- = withStatement
- .
- = exitStatement
- .
- = returnStatement
- .
- > . /* statement */
- assignment = designator ':=' expression .
- procedureCall = <
- = designator
- .
- > . /* procedureCall */
- ifStatement = <
- = 'IF' expression 'THEN' statementSequence ifStatement_ElseIf_ls 'ELSE' statementSequence 'END'
- .
- = 'IF' expression 'THEN' statementSequence ifStatement_ElseIf_ls 'END'
- .
- >. /* ifStatement */
- ifStatement_ElseIf_ls = <
- = /* epsilon */
- .
- = 'ELSIF' expression 'THEN' statementSequence ifStatement_ElseIf_ls
- .
- >. /* ifStatement_ElseIf_ls */
- caseStatement = <
- = 'CASE' expression 'OF' caseExp_ls 'ELSE' statementSequence 'END'
- .
- = 'CASE' expression 'OF' caseExp_ls 'END'
- .
- > . /* caseStatement */
- caseExp = <
- = /* epsilon */
- .
- = caseLabelList ':' statementSequence
- .
- > . /* caseExp */
- caseExp_ls = <
- = caseExp
- .
- = caseExp '|' caseExp_ls
- .
- > . /* caseExp_ls */
- caseLabelList = <
- = caseLabels
- .
- = caseLabels ',' caseLabelList
- .
- > . /* caseLabelList */
- caseLabels = const_expression_range.
- whileStatement = 'WHILE' expression 'DO' statementSequence 'END' .
- repeatStatement = 'REPEAT' statementSequence 'UNTIL' expression.
- loopStatement = 'LOOP' statementSequence 'END' .
- withStatement = 'WITH' qualident ':' qualident 'DO' statementSequence 'END' .
- exitStatement = 'EXIT' .
- returnStatement = <
- = 'RETURN' expression
- .
- = 'RETURN'
- .
- > . /* returnStatement */
- statementSequence = <
- = statement
- .
- statementSequence_ls = <
- = statement ';'
- .
- = statement ';' statementSequence
- .
- > . /* statementSequence_ls */
- > . /* statementSequence */
- /**********************************************************************/
- /**********************************************************************/
- /**********************************************************************/
- constantDeclaration = identdef '=' const_expression .
- typeDeclaration = identdef '=' type .
- varDeclaration = ident_ls ':' type .
- declarationSequence = <
- = declarationSequence_head_ls declarationSequence_foot_ls
- .
- > . /* declarationSequence */
- declarationSequence_head_ls = <
- = /* epsilon */
- .
- = 'CONST' ConstDecl_ls declarationSequence_head_ls
- .
- = 'TYPE' TypeDecl_ls declarationSequence_head_ls
- .
- = 'VAR' VarDecl_ls declarationSequence_head_ls
- .
- > . /* declarationSequence_head_ls */
- declarationSequence_foot_ls = <
- = /* epsilon */
- .
- = procedureDecl ';' declarationSequence_foot_ls
- .
- = forwardDecl ';' declarationSequence_foot_ls
- .
- > . /* declarationSequence_foot_ls */
- ConstDecl_ls = <
- = /* epsilon */
- .
- = constantDeclaration ';' ConstDecl_ls
- .
- > . /* ConstDecl_ls */
- TypeDecl_ls = <
- = /* epsilon */
- .
- = typeDeclaration ';' TypeDecl_ls
- .
- > . /* TypeDecl_ls */
- VarDecl_ls = <
- = /* epsilon */
- .
- = varDeclaration ';' VarDecl_ls
- .
- > . /* VarDecl_ls */
- /**********************************************************************/
- /**********************************************************************/
- /**********************************************************************/
- procedureDecl = procedureHead ';' procedureBody tok_identifier .
- procedureHead = <
- ='PROCEDURE' '*' identdef formalParameters
- .
- ='PROCEDURE' identdef formalParameters
- .
- ='PROCEDURE' identdef
- .
- ='PROCEDURE' '*' identdef
- .
- > . /* procedureHead */
- procedureBody = <
- = declarationSequence 'END'
- .
- = declarationSequence 'BEGIN' statementSequence 'END'
- .
- > . /* procedureBody */
- forwardDecl = <
- = 'PROCEDURE' '^' tok_identifier
- .
- = 'PROCEDURE' '^' tok_identifier '*'
- .
- = 'PROCEDURE' '^' tok_identifier formalParameters
- .
- = 'PROCEDURE' '^' tok_identifier '*' formalParameters
- .
- > . /* forwardDecl */
- /**********************************************************************/
- /**********************************************************************/
- /**********************************************************************/
- import_block = <
- = /* epsilon */
- .
- = 'IMPORT' import_ls ';'
- .
- > . /* import_ls */
- import_ls = <
- = import
- .
- = import ',' import_ls
- .
- > . /* import_ls */
- import = <
- = tok_identifier
- .
- = tok_identifier ':=' tok_identifier
- .
- > . /* import */
- /**********************************************************************/
- /**********************************************************************/
- /**********************************************************************/
- module = <
- = 'MODULE' tok_identifier ';' import_block declarationSequence 'BEGIN' statementSequence 'END' tok_identifier '.'
- .
- = 'MODULE' tok_identifier ';' import_block declarationSequence 'END' tok_identifier '.'
- .
- > . /* module */
- /**********************************************************************/
- /**********************************************************************/
- /**********************************************************************/
- /****************************************/
- /* Tokens */
- int_const: [Value: long] {Value := 0; } .
- real_const: [Value: double] {Value := 0.0; } .
- char_const: [Value: char] {Value := '\0'; } .
- string_const: [Value: tStringRef] {Value := ""; } .
- tok_identifier: [Value: tStringRef] {Value := ""; } .
- /* non-terminal attributes */
- MODULE attributes
- PROPERTY SYN
- DECLARE
- END attributes
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement