diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..abffdfc Binary files /dev/null and b/.DS_Store differ diff --git a/Grammar/g2.txt b/Grammar/g2.txt index 3bcae9b..2882d29 100644 --- a/Grammar/g2.txt +++ b/Grammar/g2.txt @@ -1,27 +1,124 @@ program -int,char,string,; -program +0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,int,char,string,;,(,),[,],{,},+,-,*,/,%,&&,||,>,<,>=,<=,==,!=,if,else,while, +program,statement_list,statement,simple_statement,compound_statement,assignment_statement,declaration_statement,io_statement,if,while_statement,primitive_type,list_type,type,arithmetic_operator,relational_operator,expression,term,factor,identifier,condition,word,number,nonZeroDigit,digit,letter + program -> statement_list + statement_list -> statement statement_list statement_list -> statement + statement -> simple_statement statement -> compound_statement + simple_statement -> assignment_statement ; simple_statement -> declaration_statement ; simple_statement -> io_statement ; + compound_statement -> if_statement compound_statement -> while_statement + +primitive_type -> int +primitive_type -> char +primitive_type -> string + +list_type -> primitive_type [ number ] + +type -> primitive_type +type -> list_type + arithmetic_operator -> + arithmetic_operator -> - arithmetic_operator -> * arithmetic_operator -> / arithmetic_operator -> % -expression -> constant -expression -> identifier -expression -> identifier [ number ] -expression -> constant +relational_operator = && +relational_operator = || +relational_operator = > +relational_operator = < +relational_operator = >= +relational_operator = <= +relational_operator = == +relational_operator = != + +expression -> expression + term +expression -> term +expression -> expression - term +term -> term * factor +term -> factor +term -> term / factor +term -> term mod factor +factor -> ( expression ) +factor -> identifier + +expression -> term + expression +expression -> term - expression +expression -> term +term -> factor * term +term -> factor / term +term -> factor +factor -> identifier +factor -> ( expression ) + +condition -> expression relational_operator expression + +declaration_statement -> type identifier +declaration_statement -> type identifier = expression + +io_statement -> identifier = readInt ( ) +io_statement -> identifier = read ( ) +io_statement -> print ( expression ) + +if_statement -> if ( condition ) { statement_list } +if_statement -> if ( condition ) { statement_list } else { statement_list } + +while_statement -> while ( condition ) { statement_list } + +identifier -> word +identifier -> word number + +word -> letter +word -> letter word +letter -> a +letter -> b +letter -> c +letter -> d +letter -> e +letter -> f +letter -> g +letter -> h +letter -> i +letter -> j +letter -> k +letter -> l +letter -> m +letter -> n +letter -> o +letter -> p +letter -> q +letter -> r +letter -> s +letter -> t +letter -> u +letter -> v +letter -> w +letter -> x +letter -> y +letter -> z +number -> digit +number -> nonZeroDigit number +nonZeroDigit -> 1 +nonZeroDigit -> 2 +nonZeroDigit -> 3 +nonZeroDigit -> 4 +nonZeroDigit -> 5 +nonZeroDigit -> 6 +nonZeroDigit -> 7 +nonZeroDigit -> 8 +nonZeroDigit -> 9 +digit -> 0 +digit -> nonZeroDigit