Грамматика языка Pascal: различия между версиями

Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
(Выложил грамматику языка Pascal)
 
Нет описания правки
Строка 15: Строка 15:
         public BlockNode lVal;
         public BlockNode lVal;
         public List<string> lsVal;
         public List<string> lsVal;
        //public DataType dtVal.DType;
public GreatType dtVal;
public GreatType dtVal;
         }
         }

Версия от 14:19, 15 сентября 2011

%{

   Dictionary<string,double> vars = new Dictionary<string,double>();

%}


%output=myyacc.cs


%union { public double dVal;

        public string sVal; 
        public int iVal; 
        public ExprNode eVal;
        public List<ExprNode> elVal;
        public TreeNode tVal;
        public BlockNode lVal;
        public List<string> lsVal;

public GreatType dtVal;

        }


%using System.IO

%using SimpleCompiler

%namespace LexScanner


%start progr

%token kBEGIN kEND kIF kTHEN kELSE kWHILE kREPEAT kUNTIL kFOR kTO kDO kVAR kOF kARRAY

%token ASSIGN SEMICOLUMN LPAREN RPAREN COLUMN COLON LQPAREN RQPAREN MPOINT 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 <iVal> funcid

%type <eVal> expr funccall

%type <tVal> stat elsepart

%type <lVal> liststat progr

%type <lsVal> listid

%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 liststat kEND | error ;

defss : defs |defss defs | ;

defs : kVAR listid COLON ktype SEMICOLUMN ;

listid  : ID |listid COLUMN ID ;

liststat  : stat | liststat SEMICOLUMN stat

       ;

ktype : kSimpleType | error ;

kSimpleType : kREAL | kINTEGER ;

stat: { $$ = new Node(@$);} | ID ASSIGN expr | ID LQPAREN expr RQPAREN ASSIGN expr | kWHILE expr kDO stat | kIF expr kTHEN stat elsepart { $$ = new IfNode($2,$4,$5,@$); } | kBEGIN liststat kEND { $$ = $2;}

       ;

elsepart: {$$ = null;} | kELSE stat ;

exprlist : expr | exprlist COLUMN expr  ;

expr: INTNUM

      | REALNUM     
      | ID
      | ID LQPAREN expr RQPAREN        
      | 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
      ;

%%