Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # The executable to produce:
- MAIN = oberon-parser
- # Source files
- SRC_C = main.c
- SRC_H =
- SRC = oberon.scan oberon.pars
- # Generated files
- GEN_C = oberon_scan.c oberon_scanSource.c oberon_pars.c
- GEN_H = oberon_scan.h oberon_scanSource.h oberon_pars.h
- GEN = oberon.rex oberon_scan.rpp oberon_pars.lrk
- ###############################################################################
- include ../config.mk
- ###############################################################################
- # Create your parser
- all: $(MAIN)
- # Run the test suite
- test:
- ./$(MAIN) test1; echo
- ./$(MAIN) test2; echo
- ###############################################################################
- # Create the Parser
- oberon_pars.lrk oberon_scan.rpp: oberon$(SOLUTION).pars
- lpp -cxzj oberon$(SOLUTION).pars
- LARK_OPTS = -cdi -Dw -5 # -5 ==> create the graphic LR-browser
- #LARK_OPTS = -cdi -Dw # ==> see ../config.mk
- oberon_pars.c oberon_pars.h: oberon_pars.lrk
- lark $(LARK_OPTS) oberon_pars.lrk
- # Create the Scanner
- oberon.rex: oberon.scan oberon_scan.rpp
- rpp < oberon.scan oberon_scan.rpp > oberon.rex
- oberon_scan.c oberon_scan.h oberon_scanSource.c oberon_scanSource.h: oberon.rex
- rex -cdis -y oberon.rex
- rm -f oberon_scanDrv.c
- ###############################################################################
- include ../common.mk
- ###############################################################################
- ###############################################################################
- # Project: COCKTAIL training
- # Descr: LR parser for an oberonession language
- # Kind: Makefile
- # Author: Dr. Juergen Vollmer <Juergen.Vollmer@informatik-vollmer.de>
- # $Id: Makefile,v 1.5 2007/06/03 16:52:25 vollmer Exp $
- ###############################################################################
- # The executable to produce:
- MAIN = oberon-parser
- # Source files
- SRC_C = main.c
- SRC_H =
- SRC = oberon.scan oberon.pars
- # Generated files
- GEN_C = oberon_scan.c oberon_scanSource.c oberon_pars.c
- GEN_H = oberon_scan.h oberon_scanSource.h oberon_pars.h
- GEN = oberon.rex oberon_scan.rpp oberon_pars.lrk
- ###############################################################################
- include ../config.mk
- ###############################################################################
- # Create your parser
- all: $(MAIN)
- # Run the test suite
- test:
- ./$(MAIN) test1; echo
- ./$(MAIN) test2; echo
- ###############################################################################
- # Create the Parser
- oberon_pars.lrk oberon_scan.rpp: oberon$(SOLUTION).pars
- lpp -cxzj oberon$(SOLUTION).pars
- LARK_OPTS = -cdi -Dw -5 # -5 ==> create the graphic LR-browser
- #LARK_OPTS = -cdi -Dw # ==> see ../config.mk
- oberon_pars.c oberon_pars.h: oberon_pars.lrk
- lark $(LARK_OPTS) oberon_pars.lrk
- # Create the Scanner
- oberon.rex: oberon.scan oberon_scan.rpp
- rpp < oberon.scan oberon_scan.rpp > oberon.rex
- oberon_scan.c oberon_scan.h oberon_scanSource.c oberon_scanSource.h: oberon.rex
- rex -cdis -y oberon.rex
- rm -f oberon_scanDrv.c
- ###############################################################################
- include ../common.mk
- ###############################################################################
- 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 = procedureCall .
- 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 ')'
- .
- = set
- .
- = 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 */
- actualParameters = <
- = '(' ')'
- .
- = '(' expression_ls ')'
- .
- >. /* actualParameters */
- designator = <
- = tok_identifier
- .
- = tok_identifier designator_actualParameters_ls
- .
- > . /* designator */
- designator_actualParameters_ls = <
- = /* epsilon */
- .
- = '[' expression_ls ']' designator_actualParameters_ls
- .
- = '(' qualident ')' designator_actualParameters_ls
- .
- = '^' designator_actualParameters_ls
- .
- = '.' tok_identifier designator_actualParameters_ls
- .
- > . /* designator_ls */
- set = '{' element_ls '}' .
- element_ls = <
- = /* epsilon */
- .
- element_s = <
- = element
- .
- = element_s ',' element
- .
- > . /* element_s */
- >. /* element_ls */
- /**********************************************************************/
- /**********************************************************************/
- /**********************************************************************/
- 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 ':' identdef
- .
- >. /* 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
- .
- > . /* statement */
- assignment = designator ':=' expression .
- procedureCall = designator actualParameters .
- 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' .
- statementSequence = <
- = statement
- .
- = statement ';' statementSequence
- .
- > . /* 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 formalParam
- .
- ='PROCEDURE' identdef formalParam
- .
- ='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: tIdent] {Value := NoIdent; } .
- tok_identifier: [Value: tIdent] {Value := NoIdent; } .
- /* non-terminal attributes */
- MODULE attributes
- PROPERTY SYN
- DECLARE
- END attributes
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement