Грамматика языка Pascal
Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
Новый вариант
%{ Dictionary<string,double> vars = new Dictionary<string,double>(); %} %union { public int iVal; public double dVal; public string sVal; public ExprNode eVal; public List<ExprNode> elVal; public TreeNode tVal; public BlockNode lVal; public List<string> lsVal; public GreatType dtVal; } %output=PascalYacc.cs %using System.IO %using Syntax_node_tree %namespace LexScanner %start progr %token kBEGIN kEND kIF kTHEN kELSE kWHILE kDO kVAR %token ASSIGN SEMICOLUMN LPAREN RPAREN COLUMN COLON POINT %token PLUS MINUS MULT DIVIDE %token AND OR NOT LT GT EQ NE LE GE DIV MOD %token <iVal> INTNUM %token <dVal> REALNUM %token <sVal> STRINGLITERAL %token <sVal> ID %token <dtVal> kREAL kINTEGER %type <eVal> expr %type <tVal> operator elsepart %type <lVal> listoperator progr %type <lsVal> ident %type <elVal> exprlist %type <dtVal> ktype kSimpleType %left LT GT LE GE EQ NE %left MINUS PLUS OR %left MULT DIVIDE AND DIV MOD %left UMINUS NOT %% progr : {} | defss kBEGIN listoperator kEND {} | error { System.Console.WriteLine("BAD TEXT!!!"); break; } ; defss : defs |defss defs | ; defs : kVAR ident COLON ktype SEMICOLUMN {} ; ident : ID {} |ident COLUMN ID {} ; listoperator : operator {} | listoperator SEMICOLUMN operator {} ; ktype : kSimpleType | error { System.Console.WriteLine("BAD GREATE TYPE"); break; } ; kSimpleType : kREAL {} | kINTEGER {} ; operator: {} | ID ASSIGN expr {} | kWHILE expr kDO operator {} operator {} | kIF expr kTHEN operator elsepart {} | kBEGIN listoperator kEND {} ; elsepart: {} | kELSE operator {} ; exprlist : expr {} | exprlist COLUMN expr {} ; expr: INTNUM {} | REALNUM {} | STRINGLITERAL {} | ID {} | expr PLUS expr {} | expr MINUS expr {} | expr MULT expr {} | expr DIVIDE expr {} | expr DIV expr {} | expr MOD expr {} | expr AND expr {} | expr OR expr {} | expr LT expr {} | expr GT expr {} | expr LE expr {} | expr GE expr {} | expr EQ expr {} | expr NE expr {} | NOT expr {} | MINUS expr %prec UMINUS {} | LPAREN expr RPAREN {} ; %%