通过LL(1)分析方法对tiny的文法进行处理,然后输入tiny程序,进行语法分析,其中也包含了词法扫描,词法扫描使用DFA状态图的循环扫描方法。 1、文法的规范化:消除文法中的左递归和提取文法的左公因子,并且对tiny的文法进行拆解,比如一条文法有几个选择,则拆成几条,最后的文法规则整理结果如下: 0 program --> stmt-sequence 1 stmt-sequence --> statement stmt' 2 stmt' --> ;statement stmt' 3 stmt' --> $ 4 statement --> if-stmt 5 statement --> repeat-stmt 6 statement --> assign-stmt 7 statement --> read-stmt 8 statement --> write-stmt 9 statement --> While-stmt 10 statement --> Dowhile-stmt 11 statement --> for-stmt 12 if-stmt --> if exp then stmt-sequence else-part' end 13 else-part' --> else stmt-sequence 14 else-part' --> $ 15 repeat-stmt --> repeat stmt-sequence until exp 16 assign-stmt --> identifier := exp 17 read-stmt --> read identifier 18 write-stmt --> write exp 19 exp --> simple-exp cmp-exp' 20 cmp-exp' --> comparison-op simple-exp 21 cmp-exp' --> $ 22 comparison-op --> < 23 comparison-op --> = 24 simple-exp --> term term' 25 term' --> addop term 26 term' --> $ 27 addop --> + 28 addop --> - 29 term --> factor factor' 30 factor' --> mulop factor 31 factor' --> $ 32 mulop --> * 33 mulop --> / 34 mul