Sie sind auf Seite 1von 6

antlr

options {

language=Java;

@header{

package a.b.c;

program:

'program First'

'Begin'

(constant|variable|function|procedure)*

statement*

'endProgram'

constant:

CONSTANT IDENT COLON type BECOMES SEMI

variable:

'identifier' IDENT (',' IDENT)* ':' type ('<-' expression) ';'

type:

'Integer'

ifStatement

:
'if' expression 'then'+

statement +

'endIf'+

('else' statement+)?

'endIf'

statement:

assignmentStatement

| ifStatement

| loopStatement

| exitStatement

| procedureCallStatement

procedureCallStatement

IDENT '(' actualParameters? ')'

actualParameters

expression (',' expression) *

assignmentStatement

IDENT BECOMES expression COLON


;

loopStatement

'for' statement 'to' variable 'do'(statement | exitStatement)* 'end' 'for' ';'

exitStatement

'endFor' 'when' expression ';'

returnStatement

'return' expression ';'

procedure

'procedure' IDENT '(' parameters? ')' '='

(constant | variable)*

'begin'

statement

'end' IDENT

parameters

parameter (',' parameter)*

parameter

:
IDENT ':' type ('<-' expression)?

function

'function' IDENT '(' parameters? ':' type '=' ')'

(constant | variable)*

(statement | returnStatement)

'endFunction'

term

IDENT

|'('expression ')'

|INTEGER

| IDENT '(' actualParameters ')'

negation

'not' term

unary

('+' | '-')* negation

mult

unary (('*' | '/' | 'mod')unary)*


;

add

mult (('+' | '-') mult)*

relation

add (('=' | '/=' | '<' | '<=' | '>' | '>=') add)*

expression

relation(('and' | 'or' )relation)*

CONSTANT:

'constant'

BECOMES:

'<-'

COLON:

':'

SEMI:

';'

INTEGER

'0'..'9'+

;
IDENT

('a'..'z' | 'A'..'Z')('a'..'z' | 'A'..'Z' | '0'..'9')*;

WS

(' ' | '\t' | '\n' | '\r' | '\f')-> channel(HIDDEN)

COMENT

('//') .* ('\n' | '\r') -> channel(HIDDEN)

MULTILINE_COMENT

( '/*') .* ('*/')-> channel(HIDDEN)

Das könnte Ihnen auch gefallen