From 29d1315410fb1a0a18c02d44c23ca2524fb01cad Mon Sep 17 00:00:00 2001 From: the-little-apprentice <1343456449@qq.com> Date: Wed, 25 Mar 2026 21:15:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5module?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- output/lab1/01_mm2.tree | 1517 +++++----- output/lab1/02_mv3.tree | 951 ++++--- output/lab1/03_sort1.tree | 619 +++-- output/lab1/05_arr_defn4.tree | 1299 +++++---- output/lab1/09_func_defn.tree | 125 +- output/lab1/11_add2.tree | 135 +- output/lab1/13_sub2.tree | 97 +- output/lab1/15_graph_coloring.tree | 753 +++-- output/lab1/2025-MYO-20.tree | 3533 ++++++++++++------------ output/lab1/22_matrix_multiply.tree | 1187 ++++---- output/lab1/25_scope3.tree | 1395 +++++----- output/lab1/29_break.tree | 327 ++- output/lab1/36_op_priority2.tree | 247 +- output/lab1/95_float.tree | 1401 +++++----- output/lab1/fft0.tree | 1409 +++++----- output/lab1/gameoflife-oscillator.tree | 519 ++-- output/lab1/if-combine3.tree | 203 +- output/lab1/large_loop_array_2.tree | 1193 ++++---- output/lab1/simple_add.tree | 123 +- output/lab1/transpose0.tree | 935 ++++--- output/lab1/tree.txt | 1573 ----------- output/lab1/vector_mul3.tree | 1127 ++++---- scripts/lab2_build_test.sh | 201 ++ src/antlr4/.antlr/SysYParser.java | 1688 ++++------- src/antlr4/SysY.g4 | 93 +- 25 files changed, 10349 insertions(+), 12301 deletions(-) delete mode 100644 output/lab1/tree.txt create mode 100644 scripts/lab2_build_test.sh diff --git a/output/lab1/01_mm2.tree b/output/lab1/01_mm2.tree index 5414b89..52b01c5 100644 --- a/output/lab1/01_mm2.tree +++ b/output/lab1/01_mm2.tree @@ -711,762 +711,761 @@ compUnit | | | `-- Ident: N | | `-- RBRACK: ] | `-- SEMI: ; -|-- funcDef -| |-- funcType -| | `-- INT: int -| |-- Ident: main -| |-- LPAREN: ( -| |-- RPAREN: ) -| `-- block -| |-- LBRACE: { -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: n -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: getint -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | `-- Ident: i -| | |-- COMMA: , -| | |-- varDef -| | | `-- Ident: j -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: i -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: j -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: n -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: j -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 0 -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- WHILE: while -| | | |-- LPAREN: ( -| | | |-- cond -| | | | `-- lOrExp -| | | | `-- lAndExp -| | | | `-- eqExp -| | | | `-- relExp -| | | | |-- relExp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: j -| | | | |-- LT: < -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: n -| | | |-- RPAREN: ) -| | | `-- stmt -| | | `-- block -| | | |-- LBRACE: { -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | |-- Ident: A -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: i -| | | | | |-- RBRACK: ] -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | `-- RBRACK: ] -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | |-- Ident: getint -| | | | | |-- LPAREN: ( -| | | | | `-- RPAREN: ) -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | `-- Ident: j -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | `-- SEMI: ; -| | | `-- RBRACE: } -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: i -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: j -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: n -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: j -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 0 -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- WHILE: while -| | | |-- LPAREN: ( -| | | |-- cond -| | | | `-- lOrExp -| | | | `-- lAndExp -| | | | `-- eqExp -| | | | `-- relExp -| | | | |-- relExp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: j -| | | | |-- LT: < -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: n -| | | |-- RPAREN: ) -| | | `-- stmt -| | | `-- block -| | | |-- LBRACE: { -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | |-- Ident: B -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: i -| | | | | |-- RBRACK: ] -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | `-- RBRACK: ] -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | |-- Ident: getint -| | | | | |-- LPAREN: ( -| | | | | `-- RPAREN: ) -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | `-- Ident: j -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | `-- SEMI: ; -| | | `-- RBRACE: } -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: starttime -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: i -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 5 -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: mm -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: n -| | | | | |-- COMMA: , -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: A -| | | | | |-- COMMA: , -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: B -| | | | | |-- COMMA: , -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: C -| | | | `-- RPAREN: ) -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: mm -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: n -| | | | | |-- COMMA: , -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: A -| | | | | |-- COMMA: , -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: C -| | | | | |-- COMMA: , -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: B -| | | | `-- RPAREN: ) -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: ans -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: i -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: n -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: j -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 0 -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- WHILE: while -| | | |-- LPAREN: ( -| | | |-- cond -| | | | `-- lOrExp -| | | | `-- lAndExp -| | | | `-- eqExp -| | | | `-- relExp -| | | | |-- relExp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: j -| | | | |-- LT: < -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: n -| | | |-- RPAREN: ) -| | | `-- stmt -| | | `-- block -| | | |-- LBRACE: { -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | `-- Ident: ans -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: ans -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | |-- Ident: B -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: i -| | | | | |-- RBRACK: ] -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | `-- RBRACK: ] -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | `-- Ident: j -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | `-- SEMI: ; -| | | `-- RBRACE: } -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: stoptime -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: putint -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: ans -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: putch -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 10 -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- RETURN: return -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| `-- RBRACE: } -`-- EOF: +`-- funcDef + |-- funcType + | `-- INT: int + |-- Ident: main + |-- LPAREN: ( + |-- RPAREN: ) + `-- block + |-- LBRACE: { + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: n + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: getint + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | `-- Ident: i + | |-- COMMA: , + | |-- varDef + | | `-- Ident: j + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: i + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: j + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: n + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: j + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 0 + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- WHILE: while + | | |-- LPAREN: ( + | | |-- cond + | | | `-- lOrExp + | | | `-- lAndExp + | | | `-- eqExp + | | | `-- relExp + | | | |-- relExp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: j + | | | |-- LT: < + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: n + | | |-- RPAREN: ) + | | `-- stmt + | | `-- block + | | |-- LBRACE: { + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | |-- Ident: A + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: i + | | | | |-- RBRACK: ] + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: j + | | | | `-- RBRACK: ] + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | |-- Ident: getint + | | | | |-- LPAREN: ( + | | | | `-- RPAREN: ) + | | | `-- SEMI: ; + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | `-- Ident: j + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | |-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: j + | | | | |-- ADD: + + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 1 + | | | `-- SEMI: ; + | | `-- RBRACE: } + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: i + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: j + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: n + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: j + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 0 + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- WHILE: while + | | |-- LPAREN: ( + | | |-- cond + | | | `-- lOrExp + | | | `-- lAndExp + | | | `-- eqExp + | | | `-- relExp + | | | |-- relExp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: j + | | | |-- LT: < + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: n + | | |-- RPAREN: ) + | | `-- stmt + | | `-- block + | | |-- LBRACE: { + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | |-- Ident: B + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: i + | | | | |-- RBRACK: ] + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: j + | | | | `-- RBRACK: ] + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | |-- Ident: getint + | | | | |-- LPAREN: ( + | | | | `-- RPAREN: ) + | | | `-- SEMI: ; + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | `-- Ident: j + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | |-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: j + | | | | |-- ADD: + + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 1 + | | | `-- SEMI: ; + | | `-- RBRACE: } + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: starttime + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: i + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 5 + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: mm + | | | |-- LPAREN: ( + | | | |-- funcRParams + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: n + | | | | |-- COMMA: , + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: A + | | | | |-- COMMA: , + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: B + | | | | |-- COMMA: , + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: C + | | | `-- RPAREN: ) + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: mm + | | | |-- LPAREN: ( + | | | |-- funcRParams + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: n + | | | | |-- COMMA: , + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: A + | | | | |-- COMMA: , + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: C + | | | | |-- COMMA: , + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: B + | | | `-- RPAREN: ) + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: ans + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: i + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: n + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: j + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 0 + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- WHILE: while + | | |-- LPAREN: ( + | | |-- cond + | | | `-- lOrExp + | | | `-- lAndExp + | | | `-- eqExp + | | | `-- relExp + | | | |-- relExp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: j + | | | |-- LT: < + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: n + | | |-- RPAREN: ) + | | `-- stmt + | | `-- block + | | |-- LBRACE: { + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | `-- Ident: ans + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | |-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: ans + | | | | |-- ADD: + + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | |-- Ident: B + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: i + | | | | |-- RBRACK: ] + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: j + | | | | `-- RBRACK: ] + | | | `-- SEMI: ; + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | `-- Ident: j + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | |-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: j + | | | | |-- ADD: + + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 1 + | | | `-- SEMI: ; + | | `-- RBRACE: } + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: stoptime + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: putint + | | |-- LPAREN: ( + | | |-- funcRParams + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: ans + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: putch + | | |-- LPAREN: ( + | | |-- funcRParams + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 10 + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- RETURN: return + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + `-- RBRACE: } diff --git a/output/lab1/02_mv3.tree b/output/lab1/02_mv3.tree index 14150bc..ecb6d99 100644 --- a/output/lab1/02_mv3.tree +++ b/output/lab1/02_mv3.tree @@ -577,479 +577,478 @@ compUnit | | | `-- Ident: N | | `-- RBRACK: ] | `-- SEMI: ; -|-- funcDef -| |-- funcType -| | `-- INT: int -| |-- Ident: main -| |-- LPAREN: ( -| |-- RPAREN: ) -| `-- block -| |-- LBRACE: { -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: n -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: getint -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | `-- Ident: i -| | |-- COMMA: , -| | |-- varDef -| | | `-- Ident: j -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: i -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: n -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: j -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 0 -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- WHILE: while -| | | |-- LPAREN: ( -| | | |-- cond -| | | | `-- lOrExp -| | | | `-- lAndExp -| | | | `-- eqExp -| | | | `-- relExp -| | | | |-- relExp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: j -| | | | |-- LT: < -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: n -| | | |-- RPAREN: ) -| | | `-- stmt -| | | `-- block -| | | |-- LBRACE: { -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | |-- Ident: A -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: i -| | | | | |-- RBRACK: ] -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | `-- RBRACK: ] -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | |-- Ident: getint -| | | | | |-- LPAREN: ( -| | | | | `-- RPAREN: ) -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | `-- Ident: j -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | `-- SEMI: ; -| | | `-- RBRACE: } -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: i -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: n -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | |-- Ident: B -| | | | |-- LBRACK: [ -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | `-- RBRACK: ] -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: getint -| | | | |-- LPAREN: ( -| | | | `-- RPAREN: ) -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: starttime -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: i -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 50 -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: mv -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: n -| | | | | |-- COMMA: , -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: A -| | | | | |-- COMMA: , -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: B -| | | | | |-- COMMA: , -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: C -| | | | `-- RPAREN: ) -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: mv -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: n -| | | | | |-- COMMA: , -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: A -| | | | | |-- COMMA: , -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: C -| | | | | |-- COMMA: , -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: B -| | | | `-- RPAREN: ) -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: stoptime -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: putarray -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: n -| | | | |-- COMMA: , -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: C -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- RETURN: return -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| `-- RBRACE: } -`-- EOF: +`-- funcDef + |-- funcType + | `-- INT: int + |-- Ident: main + |-- LPAREN: ( + |-- RPAREN: ) + `-- block + |-- LBRACE: { + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: n + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: getint + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | `-- Ident: i + | |-- COMMA: , + | |-- varDef + | | `-- Ident: j + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: i + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: n + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: j + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 0 + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- WHILE: while + | | |-- LPAREN: ( + | | |-- cond + | | | `-- lOrExp + | | | `-- lAndExp + | | | `-- eqExp + | | | `-- relExp + | | | |-- relExp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: j + | | | |-- LT: < + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: n + | | |-- RPAREN: ) + | | `-- stmt + | | `-- block + | | |-- LBRACE: { + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | |-- Ident: A + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: i + | | | | |-- RBRACK: ] + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: j + | | | | `-- RBRACK: ] + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | |-- Ident: getint + | | | | |-- LPAREN: ( + | | | | `-- RPAREN: ) + | | | `-- SEMI: ; + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | `-- Ident: j + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | |-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: j + | | | | |-- ADD: + + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 1 + | | | `-- SEMI: ; + | | `-- RBRACE: } + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: i + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: n + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | |-- Ident: B + | | | |-- LBRACK: [ + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | `-- RBRACK: ] + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: getint + | | | |-- LPAREN: ( + | | | `-- RPAREN: ) + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: starttime + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: i + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 50 + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: mv + | | | |-- LPAREN: ( + | | | |-- funcRParams + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: n + | | | | |-- COMMA: , + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: A + | | | | |-- COMMA: , + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: B + | | | | |-- COMMA: , + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: C + | | | `-- RPAREN: ) + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: mv + | | | |-- LPAREN: ( + | | | |-- funcRParams + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: n + | | | | |-- COMMA: , + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: A + | | | | |-- COMMA: , + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: C + | | | | |-- COMMA: , + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: B + | | | `-- RPAREN: ) + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: stoptime + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: putarray + | | |-- LPAREN: ( + | | |-- funcRParams + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: n + | | | |-- COMMA: , + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: C + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- RETURN: return + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + `-- RBRACE: } diff --git a/output/lab1/03_sort1.tree b/output/lab1/03_sort1.tree index 9629e62..f5a869f 100644 --- a/output/lab1/03_sort1.tree +++ b/output/lab1/03_sort1.tree @@ -1623,313 +1623,312 @@ compUnit | |-- varDef | | `-- Ident: ans | `-- SEMI: ; -|-- funcDef -| |-- funcType -| | `-- INT: int -| |-- Ident: main -| |-- LPAREN: ( -| |-- RPAREN: ) -| `-- block -| |-- LBRACE: { -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: n -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: getarray -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: a -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: starttime -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: radixSort -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 8 -| | | | |-- COMMA: , -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: a -| | | | |-- COMMA: , -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 0 -| | | | |-- COMMA: , -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: n -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: i -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: n -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: ans -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: ans -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | |-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- MUL: * -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | |-- LPAREN: ( -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | |-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | |-- Ident: a -| | | | | | |-- LBRACK: [ -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: i -| | | | | | `-- RBRACK: ] -| | | | | |-- MOD: % -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | |-- LPAREN: ( -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | |-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- number -| | | | | | | `-- IntConst: 2 -| | | | | | |-- ADD: + -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: i -| | | | | `-- RPAREN: ) -| | | | `-- RPAREN: ) -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- IF: if -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: ans -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | |-- RPAREN: ) -| | `-- stmt -| | |-- lVal -| | | `-- Ident: ans -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- unaryOp -| | | | `-- SUB: - -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: ans -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: stoptime -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: putint -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: ans -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: putch -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 10 -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- RETURN: return -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| `-- RBRACE: } -`-- EOF: +`-- funcDef + |-- funcType + | `-- INT: int + |-- Ident: main + |-- LPAREN: ( + |-- RPAREN: ) + `-- block + |-- LBRACE: { + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: n + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: getarray + | | |-- LPAREN: ( + | | |-- funcRParams + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: a + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: starttime + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: radixSort + | | |-- LPAREN: ( + | | |-- funcRParams + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 8 + | | | |-- COMMA: , + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: a + | | | |-- COMMA: , + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 0 + | | | |-- COMMA: , + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: n + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: i + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: n + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: ans + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: ans + | | | |-- ADD: + + | | | `-- mulExp + | | | |-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- MUL: * + | | | `-- unaryExp + | | | `-- primaryExp + | | | |-- LPAREN: ( + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | |-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | |-- Ident: a + | | | | | |-- LBRACK: [ + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: i + | | | | | `-- RBRACK: ] + | | | | |-- MOD: % + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | |-- LPAREN: ( + | | | | |-- exp + | | | | | `-- addExp + | | | | | |-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- number + | | | | | | `-- IntConst: 2 + | | | | | |-- ADD: + + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: i + | | | | `-- RPAREN: ) + | | | `-- RPAREN: ) + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- IF: if + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: ans + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | |-- RPAREN: ) + | `-- stmt + | |-- lVal + | | `-- Ident: ans + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- unaryOp + | | | `-- SUB: - + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: ans + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: stoptime + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: putint + | | |-- LPAREN: ( + | | |-- funcRParams + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: ans + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: putch + | | |-- LPAREN: ( + | | |-- funcRParams + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 10 + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- RETURN: return + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + `-- RBRACE: } diff --git a/output/lab1/05_arr_defn4.tree b/output/lab1/05_arr_defn4.tree index c431890..3a3e971 100644 --- a/output/lab1/05_arr_defn4.tree +++ b/output/lab1/05_arr_defn4.tree @@ -1,651 +1,650 @@ compUnit -|-- funcDef -| |-- funcType -| | `-- INT: int -| |-- Ident: main -| |-- LPAREN: ( -| |-- RPAREN: ) -| `-- block -| |-- LBRACE: { -| |-- blockItem -| | `-- decl -| | `-- constDecl -| | |-- CONST: const -| | |-- bType -| | | `-- INT: int -| | |-- constDef -| | | |-- Ident: a -| | | |-- LBRACK: [ -| | | |-- constExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 4 -| | | |-- RBRACK: ] -| | | |-- LBRACK: [ -| | | |-- constExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 2 -| | | |-- RBRACK: ] -| | | |-- ASSIGN: = -| | | `-- constInitVal -| | | |-- LBRACE: { -| | | |-- constInitVal -| | | | |-- LBRACE: { -| | | | |-- constInitVal -| | | | | `-- constExp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | |-- COMMA: , -| | | | |-- constInitVal -| | | | | `-- constExp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 2 -| | | | `-- RBRACE: } -| | | |-- COMMA: , -| | | |-- constInitVal -| | | | |-- LBRACE: { -| | | | |-- constInitVal -| | | | | `-- constExp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 3 -| | | | |-- COMMA: , -| | | | |-- constInitVal -| | | | | `-- constExp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 4 -| | | | `-- RBRACE: } -| | | |-- COMMA: , -| | | |-- constInitVal -| | | | |-- LBRACE: { -| | | | `-- RBRACE: } -| | | |-- COMMA: , -| | | |-- constInitVal -| | | | `-- constExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 7 -| | | `-- RBRACE: } -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- constDecl -| | |-- CONST: const -| | |-- bType -| | | `-- INT: int -| | |-- constDef -| | | |-- Ident: N -| | | |-- ASSIGN: = -| | | `-- constInitVal -| | | `-- constExp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 3 -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: b -| | | |-- LBRACK: [ -| | | |-- constExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 4 -| | | |-- RBRACK: ] -| | | |-- LBRACK: [ -| | | |-- constExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 2 -| | | |-- RBRACK: ] -| | | |-- ASSIGN: = -| | | `-- initVal -| | | |-- LBRACE: { -| | | `-- RBRACE: } -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: c -| | | |-- LBRACK: [ -| | | |-- constExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 4 -| | | |-- RBRACK: ] -| | | |-- LBRACK: [ -| | | |-- constExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 2 -| | | |-- RBRACK: ] -| | | |-- ASSIGN: = -| | | `-- initVal -| | | |-- LBRACE: { -| | | |-- initVal -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | |-- COMMA: , -| | | |-- initVal -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 2 -| | | |-- COMMA: , -| | | |-- initVal -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 3 -| | | |-- COMMA: , -| | | |-- initVal -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 4 -| | | |-- COMMA: , -| | | |-- initVal -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 5 -| | | |-- COMMA: , -| | | |-- initVal -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 6 -| | | |-- COMMA: , -| | | |-- initVal -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 7 -| | | |-- COMMA: , -| | | |-- initVal -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 8 -| | | `-- RBRACE: } -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: d -| | | |-- LBRACK: [ -| | | |-- constExp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: N -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | |-- RBRACK: ] -| | | |-- LBRACK: [ -| | | |-- constExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 2 -| | | |-- RBRACK: ] -| | | |-- ASSIGN: = -| | | `-- initVal -| | | |-- LBRACE: { -| | | |-- initVal -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | |-- COMMA: , -| | | |-- initVal -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 2 -| | | |-- COMMA: , -| | | |-- initVal -| | | | |-- LBRACE: { -| | | | |-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 3 -| | | | `-- RBRACE: } -| | | |-- COMMA: , -| | | |-- initVal -| | | | |-- LBRACE: { -| | | | |-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 5 -| | | | `-- RBRACE: } -| | | |-- COMMA: , -| | | |-- initVal -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | |-- Ident: a -| | | | |-- LBRACK: [ -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 3 -| | | | |-- RBRACK: ] -| | | | |-- LBRACK: [ -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 0 -| | | | `-- RBRACK: ] -| | | |-- COMMA: , -| | | |-- initVal -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 8 -| | | `-- RBRACE: } -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: e -| | | |-- LBRACK: [ -| | | |-- constExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 4 -| | | |-- RBRACK: ] -| | | |-- LBRACK: [ -| | | |-- constExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 2 -| | | |-- RBRACK: ] -| | | |-- LBRACK: [ -| | | |-- constExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | |-- RBRACK: ] -| | | |-- ASSIGN: = -| | | `-- initVal -| | | |-- LBRACE: { -| | | |-- initVal -| | | | |-- LBRACE: { -| | | | |-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | |-- Ident: d -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- number -| | | | | | `-- IntConst: 2 -| | | | | |-- RBRACK: ] -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- number -| | | | | | `-- IntConst: 1 -| | | | | `-- RBRACK: ] -| | | | |-- COMMA: , -| | | | |-- initVal -| | | | | |-- LBRACE: { -| | | | | |-- initVal -| | | | | | `-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | |-- Ident: c -| | | | | | |-- LBRACK: [ -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- number -| | | | | | | `-- IntConst: 2 -| | | | | | |-- RBRACK: ] -| | | | | | |-- LBRACK: [ -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- number -| | | | | | | `-- IntConst: 1 -| | | | | | `-- RBRACK: ] -| | | | | `-- RBRACE: } -| | | | `-- RBRACE: } -| | | |-- COMMA: , -| | | |-- initVal -| | | | |-- LBRACE: { -| | | | |-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 3 -| | | | |-- COMMA: , -| | | | |-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 4 -| | | | `-- RBRACE: } -| | | |-- COMMA: , -| | | |-- initVal -| | | | |-- LBRACE: { -| | | | |-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 5 -| | | | |-- COMMA: , -| | | | |-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 6 -| | | | `-- RBRACE: } -| | | |-- COMMA: , -| | | |-- initVal -| | | | |-- LBRACE: { -| | | | |-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 7 -| | | | |-- COMMA: , -| | | | |-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 8 -| | | | `-- RBRACE: } -| | | `-- RBRACE: } -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- RETURN: return -| | |-- exp -| | | `-- addExp -| | | |-- addExp -| | | | |-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | |-- Ident: e -| | | | | | |-- LBRACK: [ -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- number -| | | | | | | `-- IntConst: 3 -| | | | | | |-- RBRACK: ] -| | | | | | |-- LBRACK: [ -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- number -| | | | | | | `-- IntConst: 1 -| | | | | | |-- RBRACK: ] -| | | | | | |-- LBRACK: [ -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- number -| | | | | | | `-- IntConst: 0 -| | | | | | `-- RBRACK: ] -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | |-- Ident: e -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- number -| | | | | | `-- IntConst: 0 -| | | | | |-- RBRACK: ] -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- number -| | | | | | `-- IntConst: 0 -| | | | | |-- RBRACK: ] -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- number -| | | | | | `-- IntConst: 0 -| | | | | `-- RBRACK: ] -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | |-- Ident: e -| | | | |-- LBRACK: [ -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 0 -| | | | |-- RBRACK: ] -| | | | |-- LBRACK: [ -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | |-- RBRACK: ] -| | | | |-- LBRACK: [ -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 0 -| | | | `-- RBRACK: ] -| | | |-- ADD: + -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | |-- Ident: d -| | | |-- LBRACK: [ -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 3 -| | | |-- RBRACK: ] -| | | |-- LBRACK: [ -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 0 -| | | `-- RBRACK: ] -| | `-- SEMI: ; -| `-- RBRACE: } -`-- EOF: +`-- funcDef + |-- funcType + | `-- INT: int + |-- Ident: main + |-- LPAREN: ( + |-- RPAREN: ) + `-- block + |-- LBRACE: { + |-- blockItem + | `-- decl + | `-- constDecl + | |-- CONST: const + | |-- bType + | | `-- INT: int + | |-- constDef + | | |-- Ident: a + | | |-- LBRACK: [ + | | |-- constExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 4 + | | |-- RBRACK: ] + | | |-- LBRACK: [ + | | |-- constExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 2 + | | |-- RBRACK: ] + | | |-- ASSIGN: = + | | `-- constInitVal + | | |-- LBRACE: { + | | |-- constInitVal + | | | |-- LBRACE: { + | | | |-- constInitVal + | | | | `-- constExp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 1 + | | | |-- COMMA: , + | | | |-- constInitVal + | | | | `-- constExp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 2 + | | | `-- RBRACE: } + | | |-- COMMA: , + | | |-- constInitVal + | | | |-- LBRACE: { + | | | |-- constInitVal + | | | | `-- constExp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 3 + | | | |-- COMMA: , + | | | |-- constInitVal + | | | | `-- constExp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 4 + | | | `-- RBRACE: } + | | |-- COMMA: , + | | |-- constInitVal + | | | |-- LBRACE: { + | | | `-- RBRACE: } + | | |-- COMMA: , + | | |-- constInitVal + | | | `-- constExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 7 + | | `-- RBRACE: } + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- constDecl + | |-- CONST: const + | |-- bType + | | `-- INT: int + | |-- constDef + | | |-- Ident: N + | | |-- ASSIGN: = + | | `-- constInitVal + | | `-- constExp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 3 + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: b + | | |-- LBRACK: [ + | | |-- constExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 4 + | | |-- RBRACK: ] + | | |-- LBRACK: [ + | | |-- constExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 2 + | | |-- RBRACK: ] + | | |-- ASSIGN: = + | | `-- initVal + | | |-- LBRACE: { + | | `-- RBRACE: } + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: c + | | |-- LBRACK: [ + | | |-- constExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 4 + | | |-- RBRACK: ] + | | |-- LBRACK: [ + | | |-- constExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 2 + | | |-- RBRACK: ] + | | |-- ASSIGN: = + | | `-- initVal + | | |-- LBRACE: { + | | |-- initVal + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | |-- COMMA: , + | | |-- initVal + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 2 + | | |-- COMMA: , + | | |-- initVal + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 3 + | | |-- COMMA: , + | | |-- initVal + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 4 + | | |-- COMMA: , + | | |-- initVal + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 5 + | | |-- COMMA: , + | | |-- initVal + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 6 + | | |-- COMMA: , + | | |-- initVal + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 7 + | | |-- COMMA: , + | | |-- initVal + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 8 + | | `-- RBRACE: } + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: d + | | |-- LBRACK: [ + | | |-- constExp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: N + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | |-- RBRACK: ] + | | |-- LBRACK: [ + | | |-- constExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 2 + | | |-- RBRACK: ] + | | |-- ASSIGN: = + | | `-- initVal + | | |-- LBRACE: { + | | |-- initVal + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | |-- COMMA: , + | | |-- initVal + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 2 + | | |-- COMMA: , + | | |-- initVal + | | | |-- LBRACE: { + | | | |-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 3 + | | | `-- RBRACE: } + | | |-- COMMA: , + | | |-- initVal + | | | |-- LBRACE: { + | | | |-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 5 + | | | `-- RBRACE: } + | | |-- COMMA: , + | | |-- initVal + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | |-- Ident: a + | | | |-- LBRACK: [ + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 3 + | | | |-- RBRACK: ] + | | | |-- LBRACK: [ + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 0 + | | | `-- RBRACK: ] + | | |-- COMMA: , + | | |-- initVal + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 8 + | | `-- RBRACE: } + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: e + | | |-- LBRACK: [ + | | |-- constExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 4 + | | |-- RBRACK: ] + | | |-- LBRACK: [ + | | |-- constExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 2 + | | |-- RBRACK: ] + | | |-- LBRACK: [ + | | |-- constExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | |-- RBRACK: ] + | | |-- ASSIGN: = + | | `-- initVal + | | |-- LBRACE: { + | | |-- initVal + | | | |-- LBRACE: { + | | | |-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | |-- Ident: d + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- number + | | | | | `-- IntConst: 2 + | | | | |-- RBRACK: ] + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- number + | | | | | `-- IntConst: 1 + | | | | `-- RBRACK: ] + | | | |-- COMMA: , + | | | |-- initVal + | | | | |-- LBRACE: { + | | | | |-- initVal + | | | | | `-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | |-- Ident: c + | | | | | |-- LBRACK: [ + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- number + | | | | | | `-- IntConst: 2 + | | | | | |-- RBRACK: ] + | | | | | |-- LBRACK: [ + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- number + | | | | | | `-- IntConst: 1 + | | | | | `-- RBRACK: ] + | | | | `-- RBRACE: } + | | | `-- RBRACE: } + | | |-- COMMA: , + | | |-- initVal + | | | |-- LBRACE: { + | | | |-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 3 + | | | |-- COMMA: , + | | | |-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 4 + | | | `-- RBRACE: } + | | |-- COMMA: , + | | |-- initVal + | | | |-- LBRACE: { + | | | |-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 5 + | | | |-- COMMA: , + | | | |-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 6 + | | | `-- RBRACE: } + | | |-- COMMA: , + | | |-- initVal + | | | |-- LBRACE: { + | | | |-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 7 + | | | |-- COMMA: , + | | | |-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 8 + | | | `-- RBRACE: } + | | `-- RBRACE: } + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- RETURN: return + | |-- exp + | | `-- addExp + | | |-- addExp + | | | |-- addExp + | | | | |-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | |-- Ident: e + | | | | | |-- LBRACK: [ + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- number + | | | | | | `-- IntConst: 3 + | | | | | |-- RBRACK: ] + | | | | | |-- LBRACK: [ + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- number + | | | | | | `-- IntConst: 1 + | | | | | |-- RBRACK: ] + | | | | | |-- LBRACK: [ + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- number + | | | | | | `-- IntConst: 0 + | | | | | `-- RBRACK: ] + | | | | |-- ADD: + + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | |-- Ident: e + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- number + | | | | | `-- IntConst: 0 + | | | | |-- RBRACK: ] + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- number + | | | | | `-- IntConst: 0 + | | | | |-- RBRACK: ] + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- number + | | | | | `-- IntConst: 0 + | | | | `-- RBRACK: ] + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | |-- Ident: e + | | | |-- LBRACK: [ + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 0 + | | | |-- RBRACK: ] + | | | |-- LBRACK: [ + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 1 + | | | |-- RBRACK: ] + | | | |-- LBRACK: [ + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 0 + | | | `-- RBRACK: ] + | | |-- ADD: + + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | |-- Ident: d + | | |-- LBRACK: [ + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 3 + | | |-- RBRACK: ] + | | |-- LBRACK: [ + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 0 + | | `-- RBRACK: ] + | `-- SEMI: ; + `-- RBRACE: } diff --git a/output/lab1/09_func_defn.tree b/output/lab1/09_func_defn.tree index 68ac5cf..e2ae5fa 100644 --- a/output/lab1/09_func_defn.tree +++ b/output/lab1/09_func_defn.tree @@ -51,66 +51,65 @@ compUnit | | | `-- Ident: p | | `-- SEMI: ; | `-- RBRACE: } -|-- funcDef -| |-- funcType -| | `-- INT: int -| |-- Ident: main -| |-- LPAREN: ( -| |-- RPAREN: ) -| `-- block -| |-- LBRACE: { -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | `-- Ident: b -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: a -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 10 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: b -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: func -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: a -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- RETURN: return -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: b -| | `-- SEMI: ; -| `-- RBRACE: } -`-- EOF: +`-- funcDef + |-- funcType + | `-- INT: int + |-- Ident: main + |-- LPAREN: ( + |-- RPAREN: ) + `-- block + |-- LBRACE: { + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | `-- Ident: b + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: a + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 10 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: b + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: func + | | |-- LPAREN: ( + | | |-- funcRParams + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: a + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- RETURN: return + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: b + | `-- SEMI: ; + `-- RBRACE: } diff --git a/output/lab1/11_add2.tree b/output/lab1/11_add2.tree index a2deb3d..52d0997 100644 --- a/output/lab1/11_add2.tree +++ b/output/lab1/11_add2.tree @@ -1,69 +1,68 @@ compUnit -|-- funcDef -| |-- funcType -| | `-- INT: int -| |-- Ident: main -| |-- LPAREN: ( -| |-- RPAREN: ) -| `-- block -| |-- LBRACE: { -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | `-- Ident: a -| | |-- COMMA: , -| | |-- varDef -| | | `-- Ident: b -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: a -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 10 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: b -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- unaryOp -| | | | `-- SUB: - -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 1 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- RETURN: return -| | |-- exp -| | | `-- addExp -| | | |-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: a -| | | |-- ADD: + -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: b -| | `-- SEMI: ; -| `-- RBRACE: } -`-- EOF: +`-- funcDef + |-- funcType + | `-- INT: int + |-- Ident: main + |-- LPAREN: ( + |-- RPAREN: ) + `-- block + |-- LBRACE: { + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | `-- Ident: a + | |-- COMMA: , + | |-- varDef + | | `-- Ident: b + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: a + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 10 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: b + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- unaryOp + | | | `-- SUB: - + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 1 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- RETURN: return + | |-- exp + | | `-- addExp + | | |-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: a + | | |-- ADD: + + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: b + | `-- SEMI: ; + `-- RBRACE: } diff --git a/output/lab1/13_sub2.tree b/output/lab1/13_sub2.tree index abbb293..4d5c7d6 100644 --- a/output/lab1/13_sub2.tree +++ b/output/lab1/13_sub2.tree @@ -16,52 +16,51 @@ compUnit | | `-- number | | `-- IntConst: 10 | `-- SEMI: ; -|-- funcDef -| |-- funcType -| | `-- INT: int -| |-- Ident: main -| |-- LPAREN: ( -| |-- RPAREN: ) -| `-- block -| |-- LBRACE: { -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | `-- Ident: b -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: b -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 2 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- RETURN: return -| | |-- exp -| | | `-- addExp -| | | |-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: b -| | | |-- SUB: - -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: a -| | `-- SEMI: ; -| `-- RBRACE: } -`-- EOF: +`-- funcDef + |-- funcType + | `-- INT: int + |-- Ident: main + |-- LPAREN: ( + |-- RPAREN: ) + `-- block + |-- LBRACE: { + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | `-- Ident: b + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: b + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 2 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- RETURN: return + | |-- exp + | | `-- addExp + | | |-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: b + | | |-- SUB: - + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: a + | `-- SEMI: ; + `-- RBRACE: } diff --git a/output/lab1/15_graph_coloring.tree b/output/lab1/15_graph_coloring.tree index 9af8862..fe699e5 100644 --- a/output/lab1/15_graph_coloring.tree +++ b/output/lab1/15_graph_coloring.tree @@ -958,380 +958,379 @@ compUnit | | | `-- IntConst: 0 | | `-- SEMI: ; | `-- RBRACE: } -|-- funcDef -| |-- funcType -| | `-- INT: int -| |-- Ident: main -| |-- LPAREN: ( -| |-- RPAREN: ) -| `-- block -| |-- LBRACE: { -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: graph -| | | |-- LBRACK: [ -| | | |-- constExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: V -| | | |-- RBRACK: ] -| | | |-- LBRACK: [ -| | | |-- constExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: V -| | | |-- RBRACK: ] -| | | |-- ASSIGN: = -| | | `-- initVal -| | | |-- LBRACE: { -| | | |-- initVal -| | | | |-- LBRACE: { -| | | | |-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 0 -| | | | |-- COMMA: , -| | | | |-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | |-- COMMA: , -| | | | |-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | |-- COMMA: , -| | | | |-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | `-- RBRACE: } -| | | |-- COMMA: , -| | | |-- initVal -| | | | |-- LBRACE: { -| | | | |-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | |-- COMMA: , -| | | | |-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 0 -| | | | |-- COMMA: , -| | | | |-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | |-- COMMA: , -| | | | |-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 0 -| | | | `-- RBRACE: } -| | | |-- COMMA: , -| | | |-- initVal -| | | | |-- LBRACE: { -| | | | |-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | |-- COMMA: , -| | | | |-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | |-- COMMA: , -| | | | |-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 0 -| | | | |-- COMMA: , -| | | | |-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | `-- RBRACE: } -| | | |-- COMMA: , -| | | |-- initVal -| | | | |-- LBRACE: { -| | | | |-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | |-- COMMA: , -| | | | |-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 0 -| | | | |-- COMMA: , -| | | | |-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | |-- COMMA: , -| | | | |-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 0 -| | | | `-- RBRACE: } -| | | `-- RBRACE: } -| | |-- COMMA: , -| | |-- varDef -| | | |-- Ident: m -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 3 -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: color -| | | |-- LBRACK: [ -| | | |-- constExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: V -| | | `-- RBRACK: ] -| | |-- COMMA: , -| | |-- varDef -| | | |-- Ident: i -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: V -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | |-- Ident: color -| | | | |-- LBRACK: [ -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | `-- RBRACK: ] -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 0 -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- IF: if -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- unaryOp -| | | | `-- NOT: ! -| | | `-- unaryExp -| | | |-- Ident: graphColoring -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: graph -| | | | |-- COMMA: , -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: m -| | | | |-- COMMA: , -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 0 -| | | | |-- COMMA: , -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: color -| | | `-- RPAREN: ) -| | |-- RPAREN: ) -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: printMessage -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- RETURN: return -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| `-- RBRACE: } -`-- EOF: +`-- funcDef + |-- funcType + | `-- INT: int + |-- Ident: main + |-- LPAREN: ( + |-- RPAREN: ) + `-- block + |-- LBRACE: { + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: graph + | | |-- LBRACK: [ + | | |-- constExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: V + | | |-- RBRACK: ] + | | |-- LBRACK: [ + | | |-- constExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: V + | | |-- RBRACK: ] + | | |-- ASSIGN: = + | | `-- initVal + | | |-- LBRACE: { + | | |-- initVal + | | | |-- LBRACE: { + | | | |-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 0 + | | | |-- COMMA: , + | | | |-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 1 + | | | |-- COMMA: , + | | | |-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 1 + | | | |-- COMMA: , + | | | |-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 1 + | | | `-- RBRACE: } + | | |-- COMMA: , + | | |-- initVal + | | | |-- LBRACE: { + | | | |-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 1 + | | | |-- COMMA: , + | | | |-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 0 + | | | |-- COMMA: , + | | | |-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 1 + | | | |-- COMMA: , + | | | |-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 0 + | | | `-- RBRACE: } + | | |-- COMMA: , + | | |-- initVal + | | | |-- LBRACE: { + | | | |-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 1 + | | | |-- COMMA: , + | | | |-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 1 + | | | |-- COMMA: , + | | | |-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 0 + | | | |-- COMMA: , + | | | |-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 1 + | | | `-- RBRACE: } + | | |-- COMMA: , + | | |-- initVal + | | | |-- LBRACE: { + | | | |-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 1 + | | | |-- COMMA: , + | | | |-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 0 + | | | |-- COMMA: , + | | | |-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 1 + | | | |-- COMMA: , + | | | |-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 0 + | | | `-- RBRACE: } + | | `-- RBRACE: } + | |-- COMMA: , + | |-- varDef + | | |-- Ident: m + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 3 + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: color + | | |-- LBRACK: [ + | | |-- constExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: V + | | `-- RBRACK: ] + | |-- COMMA: , + | |-- varDef + | | |-- Ident: i + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: V + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | |-- Ident: color + | | | |-- LBRACK: [ + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | `-- RBRACK: ] + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 0 + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- IF: if + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- unaryOp + | | | `-- NOT: ! + | | `-- unaryExp + | | |-- Ident: graphColoring + | | |-- LPAREN: ( + | | |-- funcRParams + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: graph + | | | |-- COMMA: , + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: m + | | | |-- COMMA: , + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 0 + | | | |-- COMMA: , + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: color + | | `-- RPAREN: ) + | |-- RPAREN: ) + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: printMessage + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- RETURN: return + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + `-- RBRACE: } diff --git a/output/lab1/2025-MYO-20.tree b/output/lab1/2025-MYO-20.tree index baae46d..c81c69a 100644 --- a/output/lab1/2025-MYO-20.tree +++ b/output/lab1/2025-MYO-20.tree @@ -74,1770 +74,1769 @@ compUnit | | | `-- IntConst: 1024 | | `-- RBRACK: ] | `-- SEMI: ; -|-- funcDef -| |-- funcType -| | `-- INT: int -| |-- Ident: main -| |-- LPAREN: ( -| |-- RPAREN: ) -| `-- block -| |-- LBRACE: { -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: T -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: getint -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: R -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: getint -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: i -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: T -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- IF: if -| | | |-- LPAREN: ( -| | | |-- cond -| | | | `-- lOrExp -| | | | `-- lAndExp -| | | | `-- eqExp -| | | | `-- relExp -| | | | |-- relExp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- LT: < -| | | | `-- addExp -| | | | `-- mulExp -| | | | |-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: T -| | | | |-- DIV: / -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 2 -| | | |-- RPAREN: ) -| | | `-- stmt -| | | `-- block -| | | |-- LBRACE: { -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | |-- Ident: getarray -| | | | | |-- LPAREN: ( -| | | | | |-- funcRParams -| | | | | | `-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | |-- Ident: A -| | | | | | |-- LBRACK: [ -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: i -| | | | | | `-- RBRACK: ] -| | | | | `-- RPAREN: ) -| | | | `-- SEMI: ; -| | | `-- RBRACE: } -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: i -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: T -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- IF: if -| | | |-- LPAREN: ( -| | | |-- cond -| | | | `-- lOrExp -| | | | `-- lAndExp -| | | | `-- eqExp -| | | | `-- relExp -| | | | |-- relExp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- GE: >= -| | | | `-- addExp -| | | | `-- mulExp -| | | | |-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: T -| | | | |-- DIV: / -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 2 -| | | |-- RPAREN: ) -| | | `-- stmt -| | | `-- block -| | | |-- LBRACE: { -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | |-- Ident: getarray -| | | | | |-- LPAREN: ( -| | | | | |-- funcRParams -| | | | | | `-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | |-- Ident: B -| | | | | | |-- LBRACK: [ -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: i -| | | | | | `-- RBRACK: ] -| | | | | `-- RPAREN: ) -| | | | `-- SEMI: ; -| | | `-- RBRACE: } -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: starttime -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: i -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: T -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- IF: if -| | | |-- LPAREN: ( -| | | |-- cond -| | | | `-- lOrExp -| | | | `-- lAndExp -| | | | `-- eqExp -| | | | `-- relExp -| | | | |-- relExp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- GE: >= -| | | | `-- addExp -| | | | `-- mulExp -| | | | |-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: T -| | | | |-- DIV: / -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 2 -| | | |-- RPAREN: ) -| | | `-- stmt -| | | `-- block -| | | |-- LBRACE: { -| | | |-- blockItem -| | | | `-- decl -| | | | `-- varDecl -| | | | |-- bType -| | | | | `-- INT: int -| | | | |-- varDef -| | | | | |-- Ident: j -| | | | | |-- ASSIGN: = -| | | | | `-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 0 -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- WHILE: while -| | | | |-- LPAREN: ( -| | | | |-- cond -| | | | | `-- lOrExp -| | | | | `-- lAndExp -| | | | | `-- eqExp -| | | | | `-- relExp -| | | | | |-- relExp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | |-- LT: < -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: T -| | | | |-- RPAREN: ) -| | | | `-- stmt -| | | | `-- block -| | | | |-- LBRACE: { -| | | | |-- blockItem -| | | | | `-- stmt -| | | | | |-- lVal -| | | | | | |-- Ident: A -| | | | | | |-- LBRACK: [ -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: i -| | | | | | |-- RBRACK: ] -| | | | | | |-- LBRACK: [ -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: j -| | | | | | `-- RBRACK: ] -| | | | | |-- ASSIGN: = -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | |-- unaryOp -| | | | | | | `-- SUB: - -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- number -| | | | | | `-- IntConst: 1 -| | | | | `-- SEMI: ; -| | | | |-- blockItem -| | | | | `-- stmt -| | | | | |-- lVal -| | | | | | `-- Ident: j -| | | | | |-- ASSIGN: = -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | |-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: j -| | | | | | |-- ADD: + -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- number -| | | | | | `-- IntConst: 1 -| | | | | `-- SEMI: ; -| | | | `-- RBRACE: } -| | | `-- RBRACE: } -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: i -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: T -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- IF: if -| | | |-- LPAREN: ( -| | | |-- cond -| | | | `-- lOrExp -| | | | `-- lAndExp -| | | | `-- eqExp -| | | | `-- relExp -| | | | |-- relExp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- LT: < -| | | | `-- addExp -| | | | `-- mulExp -| | | | |-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: T -| | | | |-- DIV: / -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 2 -| | | |-- RPAREN: ) -| | | `-- stmt -| | | `-- block -| | | |-- LBRACE: { -| | | |-- blockItem -| | | | `-- decl -| | | | `-- varDecl -| | | | |-- bType -| | | | | `-- INT: int -| | | | |-- varDef -| | | | | |-- Ident: j -| | | | | |-- ASSIGN: = -| | | | | `-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 0 -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- WHILE: while -| | | | |-- LPAREN: ( -| | | | |-- cond -| | | | | `-- lOrExp -| | | | | `-- lAndExp -| | | | | `-- eqExp -| | | | | `-- relExp -| | | | | |-- relExp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | |-- LT: < -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: T -| | | | |-- RPAREN: ) -| | | | `-- stmt -| | | | `-- block -| | | | |-- LBRACE: { -| | | | |-- blockItem -| | | | | `-- stmt -| | | | | |-- lVal -| | | | | | |-- Ident: B -| | | | | | |-- LBRACK: [ -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: i -| | | | | | |-- RBRACK: ] -| | | | | | |-- LBRACK: [ -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: j -| | | | | | `-- RBRACK: ] -| | | | | |-- ASSIGN: = -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | |-- unaryOp -| | | | | | | `-- SUB: - -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- number -| | | | | | `-- IntConst: 1 -| | | | | `-- SEMI: ; -| | | | |-- blockItem -| | | | | `-- stmt -| | | | | |-- lVal -| | | | | | `-- Ident: j -| | | | | |-- ASSIGN: = -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | |-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: j -| | | | | | |-- ADD: + -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- number -| | | | | | `-- IntConst: 1 -| | | | | `-- SEMI: ; -| | | | `-- RBRACE: } -| | | `-- RBRACE: } -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: i -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: T -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- decl -| | | `-- varDecl -| | | |-- bType -| | | | `-- INT: int -| | | |-- varDef -| | | | |-- Ident: j -| | | | |-- ASSIGN: = -| | | | `-- initVal -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 0 -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- WHILE: while -| | | |-- LPAREN: ( -| | | |-- cond -| | | | `-- lOrExp -| | | | `-- lAndExp -| | | | `-- eqExp -| | | | `-- relExp -| | | | |-- relExp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: j -| | | | |-- LT: < -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: T -| | | |-- RPAREN: ) -| | | `-- stmt -| | | `-- block -| | | |-- LBRACE: { -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | |-- Ident: C -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: i -| | | | | |-- RBRACK: ] -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | `-- RBRACK: ] -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | |-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | |-- Ident: A -| | | | | | | |-- LBRACK: [ -| | | | | | | |-- exp -| | | | | | | | `-- addExp -| | | | | | | | `-- mulExp -| | | | | | | | `-- unaryExp -| | | | | | | | `-- primaryExp -| | | | | | | | `-- lVal -| | | | | | | | `-- Ident: i -| | | | | | | |-- RBRACK: ] -| | | | | | | |-- LBRACK: [ -| | | | | | | |-- exp -| | | | | | | | `-- addExp -| | | | | | | | `-- mulExp -| | | | | | | | `-- unaryExp -| | | | | | | | `-- primaryExp -| | | | | | | | `-- lVal -| | | | | | | | `-- Ident: j -| | | | | | | `-- RBRACK: ] -| | | | | | |-- MUL: * -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- number -| | | | | | `-- IntConst: 2 -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | |-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | |-- Ident: B -| | | | | | |-- LBRACK: [ -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: i -| | | | | | |-- RBRACK: ] -| | | | | | |-- LBRACK: [ -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: j -| | | | | | `-- RBRACK: ] -| | | | | |-- MUL: * -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 3 -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | `-- Ident: j -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | `-- SEMI: ; -| | | `-- RBRACE: } -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: i -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: T -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- decl -| | | `-- varDecl -| | | |-- bType -| | | | `-- INT: int -| | | |-- varDef -| | | | |-- Ident: j -| | | | |-- ASSIGN: = -| | | | `-- initVal -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 0 -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- WHILE: while -| | | |-- LPAREN: ( -| | | |-- cond -| | | | `-- lOrExp -| | | | `-- lAndExp -| | | | `-- eqExp -| | | | `-- relExp -| | | | |-- relExp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: j -| | | | |-- LT: < -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: T -| | | |-- RPAREN: ) -| | | `-- stmt -| | | `-- block -| | | |-- LBRACE: { -| | | |-- blockItem -| | | | `-- decl -| | | | `-- varDecl -| | | | |-- bType -| | | | | `-- INT: int -| | | | |-- varDef -| | | | | |-- Ident: val -| | | | | |-- ASSIGN: = -| | | | | `-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | |-- Ident: C -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: i -| | | | | |-- RBRACK: ] -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | `-- RBRACK: ] -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | `-- Ident: val -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | |-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: val -| | | | | | |-- MUL: * -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: val -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 7 -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | `-- Ident: val -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | |-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: val -| | | | | |-- DIV: / -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 3 -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | |-- Ident: C -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: i -| | | | | |-- RBRACK: ] -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | `-- RBRACK: ] -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: val -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | `-- Ident: j -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | `-- SEMI: ; -| | | `-- RBRACE: } -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: i -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: T -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- decl -| | | `-- varDecl -| | | |-- bType -| | | | `-- INT: int -| | | |-- varDef -| | | | |-- Ident: j -| | | | |-- ASSIGN: = -| | | | `-- initVal -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 0 -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- WHILE: while -| | | |-- LPAREN: ( -| | | |-- cond -| | | | `-- lOrExp -| | | | `-- lAndExp -| | | | `-- eqExp -| | | | `-- relExp -| | | | |-- relExp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: j -| | | | |-- LT: < -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: T -| | | |-- RPAREN: ) -| | | `-- stmt -| | | `-- block -| | | |-- LBRACE: { -| | | |-- blockItem -| | | | `-- decl -| | | | `-- varDecl -| | | | |-- bType -| | | | | `-- INT: int -| | | | |-- varDef -| | | | | |-- Ident: k -| | | | | |-- ASSIGN: = -| | | | | `-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 0 -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- decl -| | | | `-- varDecl -| | | | |-- bType -| | | | | `-- INT: int -| | | | |-- varDef -| | | | | |-- Ident: sum -| | | | | |-- ASSIGN: = -| | | | | `-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 0 -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- WHILE: while -| | | | |-- LPAREN: ( -| | | | |-- cond -| | | | | `-- lOrExp -| | | | | `-- lAndExp -| | | | | `-- eqExp -| | | | | `-- relExp -| | | | | |-- relExp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: k -| | | | | |-- LT: < -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: T -| | | | |-- RPAREN: ) -| | | | `-- stmt -| | | | `-- block -| | | | |-- LBRACE: { -| | | | |-- blockItem -| | | | | `-- stmt -| | | | | |-- lVal -| | | | | | `-- Ident: sum -| | | | | |-- ASSIGN: = -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | |-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: sum -| | | | | | |-- ADD: + -| | | | | | `-- mulExp -| | | | | | |-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | |-- Ident: C -| | | | | | | |-- LBRACK: [ -| | | | | | | |-- exp -| | | | | | | | `-- addExp -| | | | | | | | `-- mulExp -| | | | | | | | `-- unaryExp -| | | | | | | | `-- primaryExp -| | | | | | | | `-- lVal -| | | | | | | | `-- Ident: i -| | | | | | | |-- RBRACK: ] -| | | | | | | |-- LBRACK: [ -| | | | | | | |-- exp -| | | | | | | | `-- addExp -| | | | | | | | `-- mulExp -| | | | | | | | `-- unaryExp -| | | | | | | | `-- primaryExp -| | | | | | | | `-- lVal -| | | | | | | | `-- Ident: k -| | | | | | | `-- RBRACK: ] -| | | | | | |-- MUL: * -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | |-- Ident: A -| | | | | | |-- LBRACK: [ -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: k -| | | | | | |-- RBRACK: ] -| | | | | | |-- LBRACK: [ -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: j -| | | | | | `-- RBRACK: ] -| | | | | `-- SEMI: ; -| | | | |-- blockItem -| | | | | `-- stmt -| | | | | |-- lVal -| | | | | | `-- Ident: k -| | | | | |-- ASSIGN: = -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | |-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: k -| | | | | | |-- ADD: + -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- number -| | | | | | `-- IntConst: 1 -| | | | | `-- SEMI: ; -| | | | `-- RBRACE: } -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | |-- Ident: A -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: i -| | | | | |-- RBRACK: ] -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | `-- RBRACK: ] -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: sum -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | `-- Ident: j -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | `-- SEMI: ; -| | | `-- RBRACE: } -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: total -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: r -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: r -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: R -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 0 -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- WHILE: while -| | | |-- LPAREN: ( -| | | |-- cond -| | | | `-- lOrExp -| | | | `-- lAndExp -| | | | `-- eqExp -| | | | `-- relExp -| | | | |-- relExp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- LT: < -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: T -| | | |-- RPAREN: ) -| | | `-- stmt -| | | `-- block -| | | |-- LBRACE: { -| | | |-- blockItem -| | | | `-- decl -| | | | `-- varDecl -| | | | |-- bType -| | | | | `-- INT: int -| | | | |-- varDef -| | | | | |-- Ident: j -| | | | | |-- ASSIGN: = -| | | | | `-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 0 -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- WHILE: while -| | | | |-- LPAREN: ( -| | | | |-- cond -| | | | | `-- lOrExp -| | | | | `-- lAndExp -| | | | | `-- eqExp -| | | | | `-- relExp -| | | | | |-- relExp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | |-- LT: < -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: T -| | | | |-- RPAREN: ) -| | | | `-- stmt -| | | | `-- block -| | | | |-- LBRACE: { -| | | | |-- blockItem -| | | | | `-- stmt -| | | | | |-- lVal -| | | | | | `-- Ident: total -| | | | | |-- ASSIGN: = -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | |-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: total -| | | | | | |-- ADD: + -| | | | | | `-- mulExp -| | | | | | |-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | |-- Ident: A -| | | | | | | |-- LBRACK: [ -| | | | | | | |-- exp -| | | | | | | | `-- addExp -| | | | | | | | `-- mulExp -| | | | | | | | `-- unaryExp -| | | | | | | | `-- primaryExp -| | | | | | | | `-- lVal -| | | | | | | | `-- Ident: i -| | | | | | | |-- RBRACK: ] -| | | | | | | |-- LBRACK: [ -| | | | | | | |-- exp -| | | | | | | | `-- addExp -| | | | | | | | `-- mulExp -| | | | | | | | `-- unaryExp -| | | | | | | | `-- primaryExp -| | | | | | | | `-- lVal -| | | | | | | | `-- Ident: j -| | | | | | | `-- RBRACK: ] -| | | | | | |-- MUL: * -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | |-- Ident: A -| | | | | | |-- LBRACK: [ -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: i -| | | | | | |-- RBRACK: ] -| | | | | | |-- LBRACK: [ -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: j -| | | | | | `-- RBRACK: ] -| | | | | `-- SEMI: ; -| | | | |-- blockItem -| | | | | `-- stmt -| | | | | |-- lVal -| | | | | | `-- Ident: j -| | | | | |-- ASSIGN: = -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | |-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: j -| | | | | | |-- ADD: + -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- number -| | | | | | `-- IntConst: 1 -| | | | | `-- SEMI: ; -| | | | `-- RBRACE: } -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | `-- Ident: i -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: i -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | `-- SEMI: ; -| | | `-- RBRACE: } -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: r -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: r -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: stoptime -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: putint -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: total -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: putch -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 10 -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- RETURN: return -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| `-- RBRACE: } -`-- EOF: +`-- funcDef + |-- funcType + | `-- INT: int + |-- Ident: main + |-- LPAREN: ( + |-- RPAREN: ) + `-- block + |-- LBRACE: { + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: T + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: getint + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: R + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: getint + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: i + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: T + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- IF: if + | | |-- LPAREN: ( + | | |-- cond + | | | `-- lOrExp + | | | `-- lAndExp + | | | `-- eqExp + | | | `-- relExp + | | | |-- relExp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- LT: < + | | | `-- addExp + | | | `-- mulExp + | | | |-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: T + | | | |-- DIV: / + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 2 + | | |-- RPAREN: ) + | | `-- stmt + | | `-- block + | | |-- LBRACE: { + | | |-- blockItem + | | | `-- stmt + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | |-- Ident: getarray + | | | | |-- LPAREN: ( + | | | | |-- funcRParams + | | | | | `-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | |-- Ident: A + | | | | | |-- LBRACK: [ + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: i + | | | | | `-- RBRACK: ] + | | | | `-- RPAREN: ) + | | | `-- SEMI: ; + | | `-- RBRACE: } + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: i + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: T + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- IF: if + | | |-- LPAREN: ( + | | |-- cond + | | | `-- lOrExp + | | | `-- lAndExp + | | | `-- eqExp + | | | `-- relExp + | | | |-- relExp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- GE: >= + | | | `-- addExp + | | | `-- mulExp + | | | |-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: T + | | | |-- DIV: / + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 2 + | | |-- RPAREN: ) + | | `-- stmt + | | `-- block + | | |-- LBRACE: { + | | |-- blockItem + | | | `-- stmt + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | |-- Ident: getarray + | | | | |-- LPAREN: ( + | | | | |-- funcRParams + | | | | | `-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | |-- Ident: B + | | | | | |-- LBRACK: [ + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: i + | | | | | `-- RBRACK: ] + | | | | `-- RPAREN: ) + | | | `-- SEMI: ; + | | `-- RBRACE: } + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: starttime + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: i + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: T + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- IF: if + | | |-- LPAREN: ( + | | |-- cond + | | | `-- lOrExp + | | | `-- lAndExp + | | | `-- eqExp + | | | `-- relExp + | | | |-- relExp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- GE: >= + | | | `-- addExp + | | | `-- mulExp + | | | |-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: T + | | | |-- DIV: / + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 2 + | | |-- RPAREN: ) + | | `-- stmt + | | `-- block + | | |-- LBRACE: { + | | |-- blockItem + | | | `-- decl + | | | `-- varDecl + | | | |-- bType + | | | | `-- INT: int + | | | |-- varDef + | | | | |-- Ident: j + | | | | |-- ASSIGN: = + | | | | `-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 0 + | | | `-- SEMI: ; + | | |-- blockItem + | | | `-- stmt + | | | |-- WHILE: while + | | | |-- LPAREN: ( + | | | |-- cond + | | | | `-- lOrExp + | | | | `-- lAndExp + | | | | `-- eqExp + | | | | `-- relExp + | | | | |-- relExp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: j + | | | | |-- LT: < + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: T + | | | |-- RPAREN: ) + | | | `-- stmt + | | | `-- block + | | | |-- LBRACE: { + | | | |-- blockItem + | | | | `-- stmt + | | | | |-- lVal + | | | | | |-- Ident: A + | | | | | |-- LBRACK: [ + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: i + | | | | | |-- RBRACK: ] + | | | | | |-- LBRACK: [ + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: j + | | | | | `-- RBRACK: ] + | | | | |-- ASSIGN: = + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | |-- unaryOp + | | | | | | `-- SUB: - + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- number + | | | | | `-- IntConst: 1 + | | | | `-- SEMI: ; + | | | |-- blockItem + | | | | `-- stmt + | | | | |-- lVal + | | | | | `-- Ident: j + | | | | |-- ASSIGN: = + | | | | |-- exp + | | | | | `-- addExp + | | | | | |-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: j + | | | | | |-- ADD: + + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- number + | | | | | `-- IntConst: 1 + | | | | `-- SEMI: ; + | | | `-- RBRACE: } + | | `-- RBRACE: } + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: i + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: T + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- IF: if + | | |-- LPAREN: ( + | | |-- cond + | | | `-- lOrExp + | | | `-- lAndExp + | | | `-- eqExp + | | | `-- relExp + | | | |-- relExp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- LT: < + | | | `-- addExp + | | | `-- mulExp + | | | |-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: T + | | | |-- DIV: / + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 2 + | | |-- RPAREN: ) + | | `-- stmt + | | `-- block + | | |-- LBRACE: { + | | |-- blockItem + | | | `-- decl + | | | `-- varDecl + | | | |-- bType + | | | | `-- INT: int + | | | |-- varDef + | | | | |-- Ident: j + | | | | |-- ASSIGN: = + | | | | `-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 0 + | | | `-- SEMI: ; + | | |-- blockItem + | | | `-- stmt + | | | |-- WHILE: while + | | | |-- LPAREN: ( + | | | |-- cond + | | | | `-- lOrExp + | | | | `-- lAndExp + | | | | `-- eqExp + | | | | `-- relExp + | | | | |-- relExp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: j + | | | | |-- LT: < + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: T + | | | |-- RPAREN: ) + | | | `-- stmt + | | | `-- block + | | | |-- LBRACE: { + | | | |-- blockItem + | | | | `-- stmt + | | | | |-- lVal + | | | | | |-- Ident: B + | | | | | |-- LBRACK: [ + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: i + | | | | | |-- RBRACK: ] + | | | | | |-- LBRACK: [ + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: j + | | | | | `-- RBRACK: ] + | | | | |-- ASSIGN: = + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | |-- unaryOp + | | | | | | `-- SUB: - + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- number + | | | | | `-- IntConst: 1 + | | | | `-- SEMI: ; + | | | |-- blockItem + | | | | `-- stmt + | | | | |-- lVal + | | | | | `-- Ident: j + | | | | |-- ASSIGN: = + | | | | |-- exp + | | | | | `-- addExp + | | | | | |-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: j + | | | | | |-- ADD: + + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- number + | | | | | `-- IntConst: 1 + | | | | `-- SEMI: ; + | | | `-- RBRACE: } + | | `-- RBRACE: } + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: i + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: T + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- decl + | | `-- varDecl + | | |-- bType + | | | `-- INT: int + | | |-- varDef + | | | |-- Ident: j + | | | |-- ASSIGN: = + | | | `-- initVal + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 0 + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- WHILE: while + | | |-- LPAREN: ( + | | |-- cond + | | | `-- lOrExp + | | | `-- lAndExp + | | | `-- eqExp + | | | `-- relExp + | | | |-- relExp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: j + | | | |-- LT: < + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: T + | | |-- RPAREN: ) + | | `-- stmt + | | `-- block + | | |-- LBRACE: { + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | |-- Ident: C + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: i + | | | | |-- RBRACK: ] + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: j + | | | | `-- RBRACK: ] + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | |-- addExp + | | | | | `-- mulExp + | | | | | |-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | |-- Ident: A + | | | | | | |-- LBRACK: [ + | | | | | | |-- exp + | | | | | | | `-- addExp + | | | | | | | `-- mulExp + | | | | | | | `-- unaryExp + | | | | | | | `-- primaryExp + | | | | | | | `-- lVal + | | | | | | | `-- Ident: i + | | | | | | |-- RBRACK: ] + | | | | | | |-- LBRACK: [ + | | | | | | |-- exp + | | | | | | | `-- addExp + | | | | | | | `-- mulExp + | | | | | | | `-- unaryExp + | | | | | | | `-- primaryExp + | | | | | | | `-- lVal + | | | | | | | `-- Ident: j + | | | | | | `-- RBRACK: ] + | | | | | |-- MUL: * + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- number + | | | | | `-- IntConst: 2 + | | | | |-- ADD: + + | | | | `-- mulExp + | | | | |-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | |-- Ident: B + | | | | | |-- LBRACK: [ + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: i + | | | | | |-- RBRACK: ] + | | | | | |-- LBRACK: [ + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: j + | | | | | `-- RBRACK: ] + | | | | |-- MUL: * + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 3 + | | | `-- SEMI: ; + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | `-- Ident: j + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | |-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: j + | | | | |-- ADD: + + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 1 + | | | `-- SEMI: ; + | | `-- RBRACE: } + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: i + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: T + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- decl + | | `-- varDecl + | | |-- bType + | | | `-- INT: int + | | |-- varDef + | | | |-- Ident: j + | | | |-- ASSIGN: = + | | | `-- initVal + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 0 + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- WHILE: while + | | |-- LPAREN: ( + | | |-- cond + | | | `-- lOrExp + | | | `-- lAndExp + | | | `-- eqExp + | | | `-- relExp + | | | |-- relExp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: j + | | | |-- LT: < + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: T + | | |-- RPAREN: ) + | | `-- stmt + | | `-- block + | | |-- LBRACE: { + | | |-- blockItem + | | | `-- decl + | | | `-- varDecl + | | | |-- bType + | | | | `-- INT: int + | | | |-- varDef + | | | | |-- Ident: val + | | | | |-- ASSIGN: = + | | | | `-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | |-- Ident: C + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: i + | | | | |-- RBRACK: ] + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: j + | | | | `-- RBRACK: ] + | | | `-- SEMI: ; + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | `-- Ident: val + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | |-- addExp + | | | | | `-- mulExp + | | | | | |-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: val + | | | | | |-- MUL: * + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: val + | | | | |-- ADD: + + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 7 + | | | `-- SEMI: ; + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | `-- Ident: val + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | |-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: val + | | | | |-- DIV: / + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 3 + | | | `-- SEMI: ; + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | |-- Ident: C + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: i + | | | | |-- RBRACK: ] + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: j + | | | | `-- RBRACK: ] + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: val + | | | `-- SEMI: ; + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | `-- Ident: j + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | |-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: j + | | | | |-- ADD: + + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 1 + | | | `-- SEMI: ; + | | `-- RBRACE: } + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: i + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: T + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- decl + | | `-- varDecl + | | |-- bType + | | | `-- INT: int + | | |-- varDef + | | | |-- Ident: j + | | | |-- ASSIGN: = + | | | `-- initVal + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 0 + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- WHILE: while + | | |-- LPAREN: ( + | | |-- cond + | | | `-- lOrExp + | | | `-- lAndExp + | | | `-- eqExp + | | | `-- relExp + | | | |-- relExp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: j + | | | |-- LT: < + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: T + | | |-- RPAREN: ) + | | `-- stmt + | | `-- block + | | |-- LBRACE: { + | | |-- blockItem + | | | `-- decl + | | | `-- varDecl + | | | |-- bType + | | | | `-- INT: int + | | | |-- varDef + | | | | |-- Ident: k + | | | | |-- ASSIGN: = + | | | | `-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 0 + | | | `-- SEMI: ; + | | |-- blockItem + | | | `-- decl + | | | `-- varDecl + | | | |-- bType + | | | | `-- INT: int + | | | |-- varDef + | | | | |-- Ident: sum + | | | | |-- ASSIGN: = + | | | | `-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 0 + | | | `-- SEMI: ; + | | |-- blockItem + | | | `-- stmt + | | | |-- WHILE: while + | | | |-- LPAREN: ( + | | | |-- cond + | | | | `-- lOrExp + | | | | `-- lAndExp + | | | | `-- eqExp + | | | | `-- relExp + | | | | |-- relExp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: k + | | | | |-- LT: < + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: T + | | | |-- RPAREN: ) + | | | `-- stmt + | | | `-- block + | | | |-- LBRACE: { + | | | |-- blockItem + | | | | `-- stmt + | | | | |-- lVal + | | | | | `-- Ident: sum + | | | | |-- ASSIGN: = + | | | | |-- exp + | | | | | `-- addExp + | | | | | |-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: sum + | | | | | |-- ADD: + + | | | | | `-- mulExp + | | | | | |-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | |-- Ident: C + | | | | | | |-- LBRACK: [ + | | | | | | |-- exp + | | | | | | | `-- addExp + | | | | | | | `-- mulExp + | | | | | | | `-- unaryExp + | | | | | | | `-- primaryExp + | | | | | | | `-- lVal + | | | | | | | `-- Ident: i + | | | | | | |-- RBRACK: ] + | | | | | | |-- LBRACK: [ + | | | | | | |-- exp + | | | | | | | `-- addExp + | | | | | | | `-- mulExp + | | | | | | | `-- unaryExp + | | | | | | | `-- primaryExp + | | | | | | | `-- lVal + | | | | | | | `-- Ident: k + | | | | | | `-- RBRACK: ] + | | | | | |-- MUL: * + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | |-- Ident: A + | | | | | |-- LBRACK: [ + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: k + | | | | | |-- RBRACK: ] + | | | | | |-- LBRACK: [ + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: j + | | | | | `-- RBRACK: ] + | | | | `-- SEMI: ; + | | | |-- blockItem + | | | | `-- stmt + | | | | |-- lVal + | | | | | `-- Ident: k + | | | | |-- ASSIGN: = + | | | | |-- exp + | | | | | `-- addExp + | | | | | |-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: k + | | | | | |-- ADD: + + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- number + | | | | | `-- IntConst: 1 + | | | | `-- SEMI: ; + | | | `-- RBRACE: } + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | |-- Ident: A + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: i + | | | | |-- RBRACK: ] + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: j + | | | | `-- RBRACK: ] + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: sum + | | | `-- SEMI: ; + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | `-- Ident: j + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | |-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: j + | | | | |-- ADD: + + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 1 + | | | `-- SEMI: ; + | | `-- RBRACE: } + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: total + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: r + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: r + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: R + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 0 + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- WHILE: while + | | |-- LPAREN: ( + | | |-- cond + | | | `-- lOrExp + | | | `-- lAndExp + | | | `-- eqExp + | | | `-- relExp + | | | |-- relExp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- LT: < + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: T + | | |-- RPAREN: ) + | | `-- stmt + | | `-- block + | | |-- LBRACE: { + | | |-- blockItem + | | | `-- decl + | | | `-- varDecl + | | | |-- bType + | | | | `-- INT: int + | | | |-- varDef + | | | | |-- Ident: j + | | | | |-- ASSIGN: = + | | | | `-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 0 + | | | `-- SEMI: ; + | | |-- blockItem + | | | `-- stmt + | | | |-- WHILE: while + | | | |-- LPAREN: ( + | | | |-- cond + | | | | `-- lOrExp + | | | | `-- lAndExp + | | | | `-- eqExp + | | | | `-- relExp + | | | | |-- relExp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: j + | | | | |-- LT: < + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: T + | | | |-- RPAREN: ) + | | | `-- stmt + | | | `-- block + | | | |-- LBRACE: { + | | | |-- blockItem + | | | | `-- stmt + | | | | |-- lVal + | | | | | `-- Ident: total + | | | | |-- ASSIGN: = + | | | | |-- exp + | | | | | `-- addExp + | | | | | |-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: total + | | | | | |-- ADD: + + | | | | | `-- mulExp + | | | | | |-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | |-- Ident: A + | | | | | | |-- LBRACK: [ + | | | | | | |-- exp + | | | | | | | `-- addExp + | | | | | | | `-- mulExp + | | | | | | | `-- unaryExp + | | | | | | | `-- primaryExp + | | | | | | | `-- lVal + | | | | | | | `-- Ident: i + | | | | | | |-- RBRACK: ] + | | | | | | |-- LBRACK: [ + | | | | | | |-- exp + | | | | | | | `-- addExp + | | | | | | | `-- mulExp + | | | | | | | `-- unaryExp + | | | | | | | `-- primaryExp + | | | | | | | `-- lVal + | | | | | | | `-- Ident: j + | | | | | | `-- RBRACK: ] + | | | | | |-- MUL: * + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | |-- Ident: A + | | | | | |-- LBRACK: [ + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: i + | | | | | |-- RBRACK: ] + | | | | | |-- LBRACK: [ + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: j + | | | | | `-- RBRACK: ] + | | | | `-- SEMI: ; + | | | |-- blockItem + | | | | `-- stmt + | | | | |-- lVal + | | | | | `-- Ident: j + | | | | |-- ASSIGN: = + | | | | |-- exp + | | | | | `-- addExp + | | | | | |-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: j + | | | | | |-- ADD: + + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- number + | | | | | `-- IntConst: 1 + | | | | `-- SEMI: ; + | | | `-- RBRACE: } + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | `-- Ident: i + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | |-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: i + | | | | |-- ADD: + + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 1 + | | | `-- SEMI: ; + | | `-- RBRACE: } + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: r + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: r + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: stoptime + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: putint + | | |-- LPAREN: ( + | | |-- funcRParams + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: total + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: putch + | | |-- LPAREN: ( + | | |-- funcRParams + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 10 + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- RETURN: return + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + `-- RBRACE: } diff --git a/output/lab1/22_matrix_multiply.tree b/output/lab1/22_matrix_multiply.tree index 318d8b3..caf6cb2 100644 --- a/output/lab1/22_matrix_multiply.tree +++ b/output/lab1/22_matrix_multiply.tree @@ -405,597 +405,596 @@ compUnit | | | `-- SEMI: ; | | `-- RBRACE: } | `-- RBRACE: } -|-- funcDef -| |-- funcType -| | `-- INT: int -| |-- Ident: main -| |-- LPAREN: ( -| |-- RPAREN: ) -| `-- block -| |-- LBRACE: { -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | `-- Ident: i -| | |-- COMMA: , -| | |-- varDef -| | | `-- Ident: j -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: m1 -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: getint -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: n1 -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: getint -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: i -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: m1 -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: j -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 0 -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- WHILE: while -| | | |-- LPAREN: ( -| | | |-- cond -| | | | `-- lOrExp -| | | | `-- lAndExp -| | | | `-- eqExp -| | | | `-- relExp -| | | | |-- relExp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: j -| | | | |-- LT: < -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: n1 -| | | |-- RPAREN: ) -| | | `-- stmt -| | | `-- block -| | | |-- LBRACE: { -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | |-- Ident: a -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: i -| | | | | |-- RBRACK: ] -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | `-- RBRACK: ] -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | |-- Ident: getint -| | | | | |-- LPAREN: ( -| | | | | `-- RPAREN: ) -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | `-- Ident: j -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | `-- SEMI: ; -| | | `-- RBRACE: } -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: m2 -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: getint -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: n2 -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: getint -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: i -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: m2 -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: j -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 0 -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- WHILE: while -| | | |-- LPAREN: ( -| | | |-- cond -| | | | `-- lOrExp -| | | | `-- lAndExp -| | | | `-- eqExp -| | | | `-- relExp -| | | | |-- relExp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: j -| | | | |-- LT: < -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: n2 -| | | |-- RPAREN: ) -| | | `-- stmt -| | | `-- block -| | | |-- LBRACE: { -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | |-- Ident: b -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: i -| | | | | |-- RBRACK: ] -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | `-- RBRACK: ] -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | |-- Ident: getint -| | | | | |-- LPAREN: ( -| | | | | `-- RPAREN: ) -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | `-- Ident: j -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | `-- SEMI: ; -| | | `-- RBRACE: } -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: matrix_multiply -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: i -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: m1 -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: j -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 0 -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- WHILE: while -| | | |-- LPAREN: ( -| | | |-- cond -| | | | `-- lOrExp -| | | | `-- lAndExp -| | | | `-- eqExp -| | | | `-- relExp -| | | | |-- relExp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: j -| | | | |-- LT: < -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: n2 -| | | |-- RPAREN: ) -| | | `-- stmt -| | | `-- block -| | | |-- LBRACE: { -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | |-- Ident: putint -| | | | | |-- LPAREN: ( -| | | | | |-- funcRParams -| | | | | | `-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | |-- Ident: res -| | | | | | |-- LBRACK: [ -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: i -| | | | | | |-- RBRACK: ] -| | | | | | |-- LBRACK: [ -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: j -| | | | | | `-- RBRACK: ] -| | | | | `-- RPAREN: ) -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | |-- Ident: putch -| | | | | |-- LPAREN: ( -| | | | | |-- funcRParams -| | | | | | `-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- number -| | | | | | `-- IntConst: 32 -| | | | | `-- RPAREN: ) -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | `-- Ident: j -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | `-- SEMI: ; -| | | `-- RBRACE: } -| | |-- blockItem -| | | `-- stmt -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: putch -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 10 -| | | | `-- RPAREN: ) -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- RETURN: return -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| `-- RBRACE: } -`-- EOF: +`-- funcDef + |-- funcType + | `-- INT: int + |-- Ident: main + |-- LPAREN: ( + |-- RPAREN: ) + `-- block + |-- LBRACE: { + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | `-- Ident: i + | |-- COMMA: , + | |-- varDef + | | `-- Ident: j + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: m1 + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: getint + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: n1 + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: getint + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: i + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: m1 + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: j + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 0 + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- WHILE: while + | | |-- LPAREN: ( + | | |-- cond + | | | `-- lOrExp + | | | `-- lAndExp + | | | `-- eqExp + | | | `-- relExp + | | | |-- relExp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: j + | | | |-- LT: < + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: n1 + | | |-- RPAREN: ) + | | `-- stmt + | | `-- block + | | |-- LBRACE: { + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | |-- Ident: a + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: i + | | | | |-- RBRACK: ] + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: j + | | | | `-- RBRACK: ] + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | |-- Ident: getint + | | | | |-- LPAREN: ( + | | | | `-- RPAREN: ) + | | | `-- SEMI: ; + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | `-- Ident: j + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | |-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: j + | | | | |-- ADD: + + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 1 + | | | `-- SEMI: ; + | | `-- RBRACE: } + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: m2 + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: getint + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: n2 + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: getint + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: i + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: m2 + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: j + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 0 + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- WHILE: while + | | |-- LPAREN: ( + | | |-- cond + | | | `-- lOrExp + | | | `-- lAndExp + | | | `-- eqExp + | | | `-- relExp + | | | |-- relExp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: j + | | | |-- LT: < + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: n2 + | | |-- RPAREN: ) + | | `-- stmt + | | `-- block + | | |-- LBRACE: { + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | |-- Ident: b + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: i + | | | | |-- RBRACK: ] + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: j + | | | | `-- RBRACK: ] + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | |-- Ident: getint + | | | | |-- LPAREN: ( + | | | | `-- RPAREN: ) + | | | `-- SEMI: ; + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | `-- Ident: j + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | |-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: j + | | | | |-- ADD: + + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 1 + | | | `-- SEMI: ; + | | `-- RBRACE: } + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: matrix_multiply + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: i + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: m1 + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: j + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 0 + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- WHILE: while + | | |-- LPAREN: ( + | | |-- cond + | | | `-- lOrExp + | | | `-- lAndExp + | | | `-- eqExp + | | | `-- relExp + | | | |-- relExp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: j + | | | |-- LT: < + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: n2 + | | |-- RPAREN: ) + | | `-- stmt + | | `-- block + | | |-- LBRACE: { + | | |-- blockItem + | | | `-- stmt + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | |-- Ident: putint + | | | | |-- LPAREN: ( + | | | | |-- funcRParams + | | | | | `-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | |-- Ident: res + | | | | | |-- LBRACK: [ + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: i + | | | | | |-- RBRACK: ] + | | | | | |-- LBRACK: [ + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: j + | | | | | `-- RBRACK: ] + | | | | `-- RPAREN: ) + | | | `-- SEMI: ; + | | |-- blockItem + | | | `-- stmt + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | |-- Ident: putch + | | | | |-- LPAREN: ( + | | | | |-- funcRParams + | | | | | `-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- number + | | | | | `-- IntConst: 32 + | | | | `-- RPAREN: ) + | | | `-- SEMI: ; + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | `-- Ident: j + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | |-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: j + | | | | |-- ADD: + + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 1 + | | | `-- SEMI: ; + | | `-- RBRACE: } + | |-- blockItem + | | `-- stmt + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: putch + | | | |-- LPAREN: ( + | | | |-- funcRParams + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 10 + | | | `-- RPAREN: ) + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- RETURN: return + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + `-- RBRACE: } diff --git a/output/lab1/25_scope3.tree b/output/lab1/25_scope3.tree index 9a19b14..e1db525 100644 --- a/output/lab1/25_scope3.tree +++ b/output/lab1/25_scope3.tree @@ -1,699 +1,698 @@ compUnit -|-- funcDef -| |-- funcType -| | `-- INT: int -| |-- Ident: main -| |-- LPAREN: ( -| |-- RPAREN: ) -| `-- block -| |-- LBRACE: { -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: putch -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 97 -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: putch -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 10 -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: a -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 1 -| | |-- COMMA: , -| | |-- varDef -| | | |-- Ident: putch -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: a -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: a -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 2 -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- decl -| | | `-- varDecl -| | | |-- bType -| | | | `-- INT: int -| | | |-- varDef -| | | | |-- Ident: b -| | | | |-- ASSIGN: = -| | | | `-- initVal -| | | | `-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: a -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 3 -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: b -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: b -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 4 -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: putch -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: putch -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: a -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: b -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | `-- block -| | | |-- LBRACE: { -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | `-- Ident: b -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: b -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 5 -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- decl -| | | | `-- varDecl -| | | | |-- bType -| | | | | `-- INT: int -| | | | |-- varDef -| | | | | |-- Ident: main -| | | | | |-- ASSIGN: = -| | | | | `-- initVal -| | | | | `-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: b -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 6 -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | `-- Ident: a -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: a -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: main -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | `-- Ident: putch -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | |-- addExp -| | | | | | | |-- addExp -| | | | | | | | `-- mulExp -| | | | | | | | `-- unaryExp -| | | | | | | | `-- primaryExp -| | | | | | | | `-- lVal -| | | | | | | | `-- Ident: putch -| | | | | | | |-- ADD: + -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: a -| | | | | | |-- ADD: + -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: b -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: main -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- stmt -| | | | `-- block -| | | | |-- LBRACE: { -| | | | |-- blockItem -| | | | | `-- stmt -| | | | | |-- lVal -| | | | | | `-- Ident: b -| | | | | |-- ASSIGN: = -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | |-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: b -| | | | | | |-- ADD: + -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: a -| | | | | `-- SEMI: ; -| | | | |-- blockItem -| | | | | `-- decl -| | | | | `-- varDecl -| | | | | |-- bType -| | | | | | `-- INT: int -| | | | | |-- varDef -| | | | | | |-- Ident: a -| | | | | | |-- ASSIGN: = -| | | | | | `-- initVal -| | | | | | `-- exp -| | | | | | `-- addExp -| | | | | | |-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: main -| | | | | | |-- ADD: + -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- number -| | | | | | `-- IntConst: 7 -| | | | | `-- SEMI: ; -| | | | |-- blockItem -| | | | | `-- stmt -| | | | | |-- lVal -| | | | | | `-- Ident: a -| | | | | |-- ASSIGN: = -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | |-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: a -| | | | | | |-- ADD: + -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- number -| | | | | | `-- IntConst: 8 -| | | | | `-- SEMI: ; -| | | | |-- blockItem -| | | | | `-- stmt -| | | | | |-- lVal -| | | | | | `-- Ident: putch -| | | | | |-- ASSIGN: = -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | |-- addExp -| | | | | | | |-- addExp -| | | | | | | | |-- addExp -| | | | | | | | | `-- mulExp -| | | | | | | | | `-- unaryExp -| | | | | | | | | `-- primaryExp -| | | | | | | | | `-- lVal -| | | | | | | | | `-- Ident: putch -| | | | | | | | |-- ADD: + -| | | | | | | | `-- mulExp -| | | | | | | | `-- unaryExp -| | | | | | | | `-- primaryExp -| | | | | | | | `-- lVal -| | | | | | | | `-- Ident: a -| | | | | | | |-- ADD: + -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: b -| | | | | | |-- ADD: + -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: main -| | | | | `-- SEMI: ; -| | | | |-- blockItem -| | | | | `-- stmt -| | | | | `-- block -| | | | | |-- LBRACE: { -| | | | | |-- blockItem -| | | | | | `-- stmt -| | | | | | |-- lVal -| | | | | | | `-- Ident: b -| | | | | | |-- ASSIGN: = -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | |-- addExp -| | | | | | | | `-- mulExp -| | | | | | | | `-- unaryExp -| | | | | | | | `-- primaryExp -| | | | | | | | `-- lVal -| | | | | | | | `-- Ident: b -| | | | | | | |-- ADD: + -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: a -| | | | | | `-- SEMI: ; -| | | | | |-- blockItem -| | | | | | `-- decl -| | | | | | `-- varDecl -| | | | | | |-- bType -| | | | | | | `-- INT: int -| | | | | | |-- varDef -| | | | | | | |-- Ident: b -| | | | | | | |-- ASSIGN: = -| | | | | | | `-- initVal -| | | | | | | `-- exp -| | | | | | | `-- addExp -| | | | | | | |-- addExp -| | | | | | | | `-- mulExp -| | | | | | | | `-- unaryExp -| | | | | | | | `-- primaryExp -| | | | | | | | `-- lVal -| | | | | | | | `-- Ident: main -| | | | | | | |-- ADD: + -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- number -| | | | | | | `-- IntConst: 9 -| | | | | | `-- SEMI: ; -| | | | | |-- blockItem -| | | | | | `-- stmt -| | | | | | |-- lVal -| | | | | | | `-- Ident: a -| | | | | | |-- ASSIGN: = -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | |-- addExp -| | | | | | | | `-- mulExp -| | | | | | | | `-- unaryExp -| | | | | | | | `-- primaryExp -| | | | | | | | `-- lVal -| | | | | | | | `-- Ident: a -| | | | | | | |-- ADD: + -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- number -| | | | | | | `-- IntConst: 10 -| | | | | | `-- SEMI: ; -| | | | | |-- blockItem -| | | | | | `-- decl -| | | | | | `-- constDecl -| | | | | | |-- CONST: const -| | | | | | |-- bType -| | | | | | | `-- INT: int -| | | | | | |-- constDef -| | | | | | | |-- Ident: a -| | | | | | | |-- ASSIGN: = -| | | | | | | `-- constInitVal -| | | | | | | `-- constExp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- number -| | | | | | | `-- IntConst: 11 -| | | | | | `-- SEMI: ; -| | | | | |-- blockItem -| | | | | | `-- stmt -| | | | | | |-- lVal -| | | | | | | `-- Ident: b -| | | | | | |-- ASSIGN: = -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | |-- addExp -| | | | | | | | `-- mulExp -| | | | | | | | `-- unaryExp -| | | | | | | | `-- primaryExp -| | | | | | | | `-- lVal -| | | | | | | | `-- Ident: b -| | | | | | | |-- ADD: + -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- number -| | | | | | | `-- IntConst: 12 -| | | | | | `-- SEMI: ; -| | | | | |-- blockItem -| | | | | | `-- stmt -| | | | | | |-- lVal -| | | | | | | `-- Ident: putch -| | | | | | |-- ASSIGN: = -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | |-- addExp -| | | | | | | | |-- addExp -| | | | | | | | | |-- addExp -| | | | | | | | | | `-- mulExp -| | | | | | | | | | `-- unaryExp -| | | | | | | | | | `-- primaryExp -| | | | | | | | | | `-- lVal -| | | | | | | | | | `-- Ident: putch -| | | | | | | | | |-- ADD: + -| | | | | | | | | `-- mulExp -| | | | | | | | | `-- unaryExp -| | | | | | | | | `-- primaryExp -| | | | | | | | | `-- lVal -| | | | | | | | | `-- Ident: a -| | | | | | | | |-- ADD: + -| | | | | | | | `-- mulExp -| | | | | | | | `-- unaryExp -| | | | | | | | `-- primaryExp -| | | | | | | | `-- lVal -| | | | | | | | `-- Ident: b -| | | | | | | |-- ADD: + -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: main -| | | | | | `-- SEMI: ; -| | | | | |-- blockItem -| | | | | | `-- stmt -| | | | | | `-- block -| | | | | | |-- LBRACE: { -| | | | | | |-- blockItem -| | | | | | | `-- stmt -| | | | | | | |-- lVal -| | | | | | | | `-- Ident: main -| | | | | | | |-- ASSIGN: = -| | | | | | | |-- exp -| | | | | | | | `-- addExp -| | | | | | | | |-- addExp -| | | | | | | | | `-- mulExp -| | | | | | | | | `-- unaryExp -| | | | | | | | | `-- primaryExp -| | | | | | | | | `-- lVal -| | | | | | | | | `-- Ident: main -| | | | | | | | |-- ADD: + -| | | | | | | | `-- mulExp -| | | | | | | | `-- unaryExp -| | | | | | | | `-- primaryExp -| | | | | | | | `-- lVal -| | | | | | | | `-- Ident: b -| | | | | | | `-- SEMI: ; -| | | | | | |-- blockItem -| | | | | | | `-- decl -| | | | | | | `-- varDecl -| | | | | | | |-- bType -| | | | | | | | `-- INT: int -| | | | | | | |-- varDef -| | | | | | | | |-- Ident: main -| | | | | | | | |-- ASSIGN: = -| | | | | | | | `-- initVal -| | | | | | | | `-- exp -| | | | | | | | `-- addExp -| | | | | | | | |-- addExp -| | | | | | | | | `-- mulExp -| | | | | | | | | `-- unaryExp -| | | | | | | | | `-- primaryExp -| | | | | | | | | `-- lVal -| | | | | | | | | `-- Ident: b -| | | | | | | | |-- ADD: + -| | | | | | | | `-- mulExp -| | | | | | | | `-- unaryExp -| | | | | | | | `-- primaryExp -| | | | | | | | `-- number -| | | | | | | | `-- IntConst: 13 -| | | | | | | `-- SEMI: ; -| | | | | | |-- blockItem -| | | | | | | `-- stmt -| | | | | | | |-- lVal -| | | | | | | | `-- Ident: main -| | | | | | | |-- ASSIGN: = -| | | | | | | |-- exp -| | | | | | | | `-- addExp -| | | | | | | | |-- addExp -| | | | | | | | | `-- mulExp -| | | | | | | | | `-- unaryExp -| | | | | | | | | `-- primaryExp -| | | | | | | | | `-- lVal -| | | | | | | | | `-- Ident: main -| | | | | | | | |-- ADD: + -| | | | | | | | `-- mulExp -| | | | | | | | `-- unaryExp -| | | | | | | | `-- primaryExp -| | | | | | | | `-- lVal -| | | | | | | | `-- Ident: a -| | | | | | | `-- SEMI: ; -| | | | | | |-- blockItem -| | | | | | | `-- stmt -| | | | | | | |-- lVal -| | | | | | | | `-- Ident: putch -| | | | | | | |-- ASSIGN: = -| | | | | | | |-- exp -| | | | | | | | `-- addExp -| | | | | | | | |-- addExp -| | | | | | | | | |-- addExp -| | | | | | | | | | |-- addExp -| | | | | | | | | | | `-- mulExp -| | | | | | | | | | | `-- unaryExp -| | | | | | | | | | | `-- primaryExp -| | | | | | | | | | | `-- lVal -| | | | | | | | | | | `-- Ident: putch -| | | | | | | | | | |-- ADD: + -| | | | | | | | | | `-- mulExp -| | | | | | | | | | `-- unaryExp -| | | | | | | | | | `-- primaryExp -| | | | | | | | | | `-- lVal -| | | | | | | | | | `-- Ident: a -| | | | | | | | | |-- ADD: + -| | | | | | | | | `-- mulExp -| | | | | | | | | `-- unaryExp -| | | | | | | | | `-- primaryExp -| | | | | | | | | `-- lVal -| | | | | | | | | `-- Ident: b -| | | | | | | | |-- ADD: + -| | | | | | | | `-- mulExp -| | | | | | | | `-- unaryExp -| | | | | | | | `-- primaryExp -| | | | | | | | `-- lVal -| | | | | | | | `-- Ident: main -| | | | | | | `-- SEMI: ; -| | | | | | `-- RBRACE: } -| | | | | |-- blockItem -| | | | | | `-- stmt -| | | | | | |-- lVal -| | | | | | | `-- Ident: putch -| | | | | | |-- ASSIGN: = -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | |-- addExp -| | | | | | | | `-- mulExp -| | | | | | | | `-- unaryExp -| | | | | | | | `-- primaryExp -| | | | | | | | `-- lVal -| | | | | | | | `-- Ident: putch -| | | | | | | |-- SUB: - -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: main -| | | | | | `-- SEMI: ; -| | | | | `-- RBRACE: } -| | | | |-- blockItem -| | | | | `-- stmt -| | | | | |-- lVal -| | | | | | `-- Ident: putch -| | | | | |-- ASSIGN: = -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | |-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: putch -| | | | | | |-- SUB: - -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: b -| | | | | `-- SEMI: ; -| | | | `-- RBRACE: } -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | `-- Ident: putch -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: putch -| | | | | |-- SUB: - -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: a -| | | | `-- SEMI: ; -| | | `-- RBRACE: } -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- RETURN: return -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | |-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: putch -| | | |-- MOD: % -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 77 -| | `-- SEMI: ; -| `-- RBRACE: } -`-- EOF: +`-- funcDef + |-- funcType + | `-- INT: int + |-- Ident: main + |-- LPAREN: ( + |-- RPAREN: ) + `-- block + |-- LBRACE: { + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: putch + | | |-- LPAREN: ( + | | |-- funcRParams + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 97 + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: putch + | | |-- LPAREN: ( + | | |-- funcRParams + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 10 + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: a + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 1 + | |-- COMMA: , + | |-- varDef + | | |-- Ident: putch + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: a + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: a + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 2 + | | `-- SEMI: ; + | |-- blockItem + | | `-- decl + | | `-- varDecl + | | |-- bType + | | | `-- INT: int + | | |-- varDef + | | | |-- Ident: b + | | | |-- ASSIGN: = + | | | `-- initVal + | | | `-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: a + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 3 + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: b + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: b + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 4 + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: putch + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | |-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: putch + | | | | |-- ADD: + + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: a + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: b + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | `-- block + | | |-- LBRACE: { + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | `-- Ident: b + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | |-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: b + | | | | |-- ADD: + + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 5 + | | | `-- SEMI: ; + | | |-- blockItem + | | | `-- decl + | | | `-- varDecl + | | | |-- bType + | | | | `-- INT: int + | | | |-- varDef + | | | | |-- Ident: main + | | | | |-- ASSIGN: = + | | | | `-- initVal + | | | | `-- exp + | | | | `-- addExp + | | | | |-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: b + | | | | |-- ADD: + + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 6 + | | | `-- SEMI: ; + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | `-- Ident: a + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | |-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: a + | | | | |-- ADD: + + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: main + | | | `-- SEMI: ; + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | `-- Ident: putch + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | |-- addExp + | | | | | |-- addExp + | | | | | | |-- addExp + | | | | | | | `-- mulExp + | | | | | | | `-- unaryExp + | | | | | | | `-- primaryExp + | | | | | | | `-- lVal + | | | | | | | `-- Ident: putch + | | | | | | |-- ADD: + + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: a + | | | | | |-- ADD: + + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: b + | | | | |-- ADD: + + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: main + | | | `-- SEMI: ; + | | |-- blockItem + | | | `-- stmt + | | | `-- block + | | | |-- LBRACE: { + | | | |-- blockItem + | | | | `-- stmt + | | | | |-- lVal + | | | | | `-- Ident: b + | | | | |-- ASSIGN: = + | | | | |-- exp + | | | | | `-- addExp + | | | | | |-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: b + | | | | | |-- ADD: + + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: a + | | | | `-- SEMI: ; + | | | |-- blockItem + | | | | `-- decl + | | | | `-- varDecl + | | | | |-- bType + | | | | | `-- INT: int + | | | | |-- varDef + | | | | | |-- Ident: a + | | | | | |-- ASSIGN: = + | | | | | `-- initVal + | | | | | `-- exp + | | | | | `-- addExp + | | | | | |-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: main + | | | | | |-- ADD: + + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- number + | | | | | `-- IntConst: 7 + | | | | `-- SEMI: ; + | | | |-- blockItem + | | | | `-- stmt + | | | | |-- lVal + | | | | | `-- Ident: a + | | | | |-- ASSIGN: = + | | | | |-- exp + | | | | | `-- addExp + | | | | | |-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: a + | | | | | |-- ADD: + + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- number + | | | | | `-- IntConst: 8 + | | | | `-- SEMI: ; + | | | |-- blockItem + | | | | `-- stmt + | | | | |-- lVal + | | | | | `-- Ident: putch + | | | | |-- ASSIGN: = + | | | | |-- exp + | | | | | `-- addExp + | | | | | |-- addExp + | | | | | | |-- addExp + | | | | | | | |-- addExp + | | | | | | | | `-- mulExp + | | | | | | | | `-- unaryExp + | | | | | | | | `-- primaryExp + | | | | | | | | `-- lVal + | | | | | | | | `-- Ident: putch + | | | | | | | |-- ADD: + + | | | | | | | `-- mulExp + | | | | | | | `-- unaryExp + | | | | | | | `-- primaryExp + | | | | | | | `-- lVal + | | | | | | | `-- Ident: a + | | | | | | |-- ADD: + + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: b + | | | | | |-- ADD: + + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: main + | | | | `-- SEMI: ; + | | | |-- blockItem + | | | | `-- stmt + | | | | `-- block + | | | | |-- LBRACE: { + | | | | |-- blockItem + | | | | | `-- stmt + | | | | | |-- lVal + | | | | | | `-- Ident: b + | | | | | |-- ASSIGN: = + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | |-- addExp + | | | | | | | `-- mulExp + | | | | | | | `-- unaryExp + | | | | | | | `-- primaryExp + | | | | | | | `-- lVal + | | | | | | | `-- Ident: b + | | | | | | |-- ADD: + + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: a + | | | | | `-- SEMI: ; + | | | | |-- blockItem + | | | | | `-- decl + | | | | | `-- varDecl + | | | | | |-- bType + | | | | | | `-- INT: int + | | | | | |-- varDef + | | | | | | |-- Ident: b + | | | | | | |-- ASSIGN: = + | | | | | | `-- initVal + | | | | | | `-- exp + | | | | | | `-- addExp + | | | | | | |-- addExp + | | | | | | | `-- mulExp + | | | | | | | `-- unaryExp + | | | | | | | `-- primaryExp + | | | | | | | `-- lVal + | | | | | | | `-- Ident: main + | | | | | | |-- ADD: + + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- number + | | | | | | `-- IntConst: 9 + | | | | | `-- SEMI: ; + | | | | |-- blockItem + | | | | | `-- stmt + | | | | | |-- lVal + | | | | | | `-- Ident: a + | | | | | |-- ASSIGN: = + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | |-- addExp + | | | | | | | `-- mulExp + | | | | | | | `-- unaryExp + | | | | | | | `-- primaryExp + | | | | | | | `-- lVal + | | | | | | | `-- Ident: a + | | | | | | |-- ADD: + + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- number + | | | | | | `-- IntConst: 10 + | | | | | `-- SEMI: ; + | | | | |-- blockItem + | | | | | `-- decl + | | | | | `-- constDecl + | | | | | |-- CONST: const + | | | | | |-- bType + | | | | | | `-- INT: int + | | | | | |-- constDef + | | | | | | |-- Ident: a + | | | | | | |-- ASSIGN: = + | | | | | | `-- constInitVal + | | | | | | `-- constExp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- number + | | | | | | `-- IntConst: 11 + | | | | | `-- SEMI: ; + | | | | |-- blockItem + | | | | | `-- stmt + | | | | | |-- lVal + | | | | | | `-- Ident: b + | | | | | |-- ASSIGN: = + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | |-- addExp + | | | | | | | `-- mulExp + | | | | | | | `-- unaryExp + | | | | | | | `-- primaryExp + | | | | | | | `-- lVal + | | | | | | | `-- Ident: b + | | | | | | |-- ADD: + + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- number + | | | | | | `-- IntConst: 12 + | | | | | `-- SEMI: ; + | | | | |-- blockItem + | | | | | `-- stmt + | | | | | |-- lVal + | | | | | | `-- Ident: putch + | | | | | |-- ASSIGN: = + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | |-- addExp + | | | | | | | |-- addExp + | | | | | | | | |-- addExp + | | | | | | | | | `-- mulExp + | | | | | | | | | `-- unaryExp + | | | | | | | | | `-- primaryExp + | | | | | | | | | `-- lVal + | | | | | | | | | `-- Ident: putch + | | | | | | | | |-- ADD: + + | | | | | | | | `-- mulExp + | | | | | | | | `-- unaryExp + | | | | | | | | `-- primaryExp + | | | | | | | | `-- lVal + | | | | | | | | `-- Ident: a + | | | | | | | |-- ADD: + + | | | | | | | `-- mulExp + | | | | | | | `-- unaryExp + | | | | | | | `-- primaryExp + | | | | | | | `-- lVal + | | | | | | | `-- Ident: b + | | | | | | |-- ADD: + + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: main + | | | | | `-- SEMI: ; + | | | | |-- blockItem + | | | | | `-- stmt + | | | | | `-- block + | | | | | |-- LBRACE: { + | | | | | |-- blockItem + | | | | | | `-- stmt + | | | | | | |-- lVal + | | | | | | | `-- Ident: main + | | | | | | |-- ASSIGN: = + | | | | | | |-- exp + | | | | | | | `-- addExp + | | | | | | | |-- addExp + | | | | | | | | `-- mulExp + | | | | | | | | `-- unaryExp + | | | | | | | | `-- primaryExp + | | | | | | | | `-- lVal + | | | | | | | | `-- Ident: main + | | | | | | | |-- ADD: + + | | | | | | | `-- mulExp + | | | | | | | `-- unaryExp + | | | | | | | `-- primaryExp + | | | | | | | `-- lVal + | | | | | | | `-- Ident: b + | | | | | | `-- SEMI: ; + | | | | | |-- blockItem + | | | | | | `-- decl + | | | | | | `-- varDecl + | | | | | | |-- bType + | | | | | | | `-- INT: int + | | | | | | |-- varDef + | | | | | | | |-- Ident: main + | | | | | | | |-- ASSIGN: = + | | | | | | | `-- initVal + | | | | | | | `-- exp + | | | | | | | `-- addExp + | | | | | | | |-- addExp + | | | | | | | | `-- mulExp + | | | | | | | | `-- unaryExp + | | | | | | | | `-- primaryExp + | | | | | | | | `-- lVal + | | | | | | | | `-- Ident: b + | | | | | | | |-- ADD: + + | | | | | | | `-- mulExp + | | | | | | | `-- unaryExp + | | | | | | | `-- primaryExp + | | | | | | | `-- number + | | | | | | | `-- IntConst: 13 + | | | | | | `-- SEMI: ; + | | | | | |-- blockItem + | | | | | | `-- stmt + | | | | | | |-- lVal + | | | | | | | `-- Ident: main + | | | | | | |-- ASSIGN: = + | | | | | | |-- exp + | | | | | | | `-- addExp + | | | | | | | |-- addExp + | | | | | | | | `-- mulExp + | | | | | | | | `-- unaryExp + | | | | | | | | `-- primaryExp + | | | | | | | | `-- lVal + | | | | | | | | `-- Ident: main + | | | | | | | |-- ADD: + + | | | | | | | `-- mulExp + | | | | | | | `-- unaryExp + | | | | | | | `-- primaryExp + | | | | | | | `-- lVal + | | | | | | | `-- Ident: a + | | | | | | `-- SEMI: ; + | | | | | |-- blockItem + | | | | | | `-- stmt + | | | | | | |-- lVal + | | | | | | | `-- Ident: putch + | | | | | | |-- ASSIGN: = + | | | | | | |-- exp + | | | | | | | `-- addExp + | | | | | | | |-- addExp + | | | | | | | | |-- addExp + | | | | | | | | | |-- addExp + | | | | | | | | | | `-- mulExp + | | | | | | | | | | `-- unaryExp + | | | | | | | | | | `-- primaryExp + | | | | | | | | | | `-- lVal + | | | | | | | | | | `-- Ident: putch + | | | | | | | | | |-- ADD: + + | | | | | | | | | `-- mulExp + | | | | | | | | | `-- unaryExp + | | | | | | | | | `-- primaryExp + | | | | | | | | | `-- lVal + | | | | | | | | | `-- Ident: a + | | | | | | | | |-- ADD: + + | | | | | | | | `-- mulExp + | | | | | | | | `-- unaryExp + | | | | | | | | `-- primaryExp + | | | | | | | | `-- lVal + | | | | | | | | `-- Ident: b + | | | | | | | |-- ADD: + + | | | | | | | `-- mulExp + | | | | | | | `-- unaryExp + | | | | | | | `-- primaryExp + | | | | | | | `-- lVal + | | | | | | | `-- Ident: main + | | | | | | `-- SEMI: ; + | | | | | `-- RBRACE: } + | | | | |-- blockItem + | | | | | `-- stmt + | | | | | |-- lVal + | | | | | | `-- Ident: putch + | | | | | |-- ASSIGN: = + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | |-- addExp + | | | | | | | `-- mulExp + | | | | | | | `-- unaryExp + | | | | | | | `-- primaryExp + | | | | | | | `-- lVal + | | | | | | | `-- Ident: putch + | | | | | | |-- SUB: - + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: main + | | | | | `-- SEMI: ; + | | | | `-- RBRACE: } + | | | |-- blockItem + | | | | `-- stmt + | | | | |-- lVal + | | | | | `-- Ident: putch + | | | | |-- ASSIGN: = + | | | | |-- exp + | | | | | `-- addExp + | | | | | |-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: putch + | | | | | |-- SUB: - + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: b + | | | | `-- SEMI: ; + | | | `-- RBRACE: } + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | `-- Ident: putch + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | |-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: putch + | | | | |-- SUB: - + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: a + | | | `-- SEMI: ; + | | `-- RBRACE: } + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- RETURN: return + | |-- exp + | | `-- addExp + | | `-- mulExp + | | |-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: putch + | | |-- MOD: % + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 77 + | `-- SEMI: ; + `-- RBRACE: } diff --git a/output/lab1/29_break.tree b/output/lab1/29_break.tree index bedb8d9..1c9f026 100644 --- a/output/lab1/29_break.tree +++ b/output/lab1/29_break.tree @@ -1,165 +1,164 @@ compUnit -|-- funcDef -| |-- funcType -| | `-- INT: int -| |-- Ident: main -| |-- LPAREN: ( -| |-- RPAREN: ) -| `-- block -| |-- LBRACE: { -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | `-- Ident: i -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: i -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | `-- Ident: sum -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: sum -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 100 -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- IF: if -| | | |-- LPAREN: ( -| | | |-- cond -| | | | `-- lOrExp -| | | | `-- lAndExp -| | | | `-- eqExp -| | | | |-- eqExp -| | | | | `-- relExp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- EQ: == -| | | | `-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 50 -| | | |-- RPAREN: ) -| | | `-- stmt -| | | `-- block -| | | |-- LBRACE: { -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- BREAK: break -| | | | `-- SEMI: ; -| | | `-- RBRACE: } -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: sum -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: sum -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- RETURN: return -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: sum -| | `-- SEMI: ; -| `-- RBRACE: } -`-- EOF: +`-- funcDef + |-- funcType + | `-- INT: int + |-- Ident: main + |-- LPAREN: ( + |-- RPAREN: ) + `-- block + |-- LBRACE: { + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | `-- Ident: i + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: i + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | `-- Ident: sum + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: sum + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 100 + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- IF: if + | | |-- LPAREN: ( + | | |-- cond + | | | `-- lOrExp + | | | `-- lAndExp + | | | `-- eqExp + | | | |-- eqExp + | | | | `-- relExp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- EQ: == + | | | `-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 50 + | | |-- RPAREN: ) + | | `-- stmt + | | `-- block + | | |-- LBRACE: { + | | |-- blockItem + | | | `-- stmt + | | | |-- BREAK: break + | | | `-- SEMI: ; + | | `-- RBRACE: } + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: sum + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: sum + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- RETURN: return + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: sum + | `-- SEMI: ; + `-- RBRACE: } diff --git a/output/lab1/36_op_priority2.tree b/output/lab1/36_op_priority2.tree index 71ef8ba..27132db 100644 --- a/output/lab1/36_op_priority2.tree +++ b/output/lab1/36_op_priority2.tree @@ -1,125 +1,124 @@ compUnit -|-- funcDef -| |-- funcType -| | `-- INT: int -| |-- Ident: main -| |-- LPAREN: ( -| |-- RPAREN: ) -| `-- block -| |-- LBRACE: { -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | `-- Ident: a -| | |-- COMMA: , -| | |-- varDef -| | | `-- Ident: b -| | |-- COMMA: , -| | |-- varDef -| | | `-- Ident: c -| | |-- COMMA: , -| | |-- varDef -| | | `-- Ident: d -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: a -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 10 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: b -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 4 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: c -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 2 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: d -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 2 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- RETURN: return -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | |-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | |-- LPAREN: ( -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: c -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: a -| | | | `-- RPAREN: ) -| | | |-- MUL: * -| | | `-- unaryExp -| | | `-- primaryExp -| | | |-- LPAREN: ( -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: b -| | | | |-- SUB: - -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: d -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| `-- RBRACE: } -`-- EOF: +`-- funcDef + |-- funcType + | `-- INT: int + |-- Ident: main + |-- LPAREN: ( + |-- RPAREN: ) + `-- block + |-- LBRACE: { + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | `-- Ident: a + | |-- COMMA: , + | |-- varDef + | | `-- Ident: b + | |-- COMMA: , + | |-- varDef + | | `-- Ident: c + | |-- COMMA: , + | |-- varDef + | | `-- Ident: d + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: a + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 10 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: b + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 4 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: c + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 2 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: d + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 2 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- RETURN: return + | |-- exp + | | `-- addExp + | | `-- mulExp + | | |-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | |-- LPAREN: ( + | | | |-- exp + | | | | `-- addExp + | | | | |-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: c + | | | | |-- ADD: + + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: a + | | | `-- RPAREN: ) + | | |-- MUL: * + | | `-- unaryExp + | | `-- primaryExp + | | |-- LPAREN: ( + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: b + | | | |-- SUB: - + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: d + | | `-- RPAREN: ) + | `-- SEMI: ; + `-- RBRACE: } diff --git a/output/lab1/95_float.tree b/output/lab1/95_float.tree index a8384c0..f1f949e 100644 --- a/output/lab1/95_float.tree +++ b/output/lab1/95_float.tree @@ -790,704 +790,703 @@ compUnit | | | `-- SEMI: ; | | `-- RBRACE: } | `-- RBRACE: } -|-- funcDef -| |-- funcType -| | `-- INT: int -| |-- Ident: main -| |-- LPAREN: ( -| |-- RPAREN: ) -| `-- block -| |-- LBRACE: { -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: assert_not -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: float_eq -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: HEX2 -| | | | | |-- COMMA: , -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: FACT -| | | | `-- RPAREN: ) -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: assert_not -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: float_eq -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: EVAL1 -| | | | | |-- COMMA: , -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: EVAL2 -| | | | `-- RPAREN: ) -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: assert -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: float_eq -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: EVAL2 -| | | | | |-- COMMA: , -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: EVAL3 -| | | | `-- RPAREN: ) -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: assert -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: float_eq -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | |-- Ident: circle_area -| | | | | | |-- LPAREN: ( -| | | | | | |-- funcRParams -| | | | | | | `-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: RADIUS -| | | | | | `-- RPAREN: ) -| | | | | |-- COMMA: , -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | |-- Ident: circle_area -| | | | | |-- LPAREN: ( -| | | | | |-- funcRParams -| | | | | | `-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: FIVE -| | | | | `-- RPAREN: ) -| | | | `-- RPAREN: ) -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: assert_not -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: float_eq -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: CONV1 -| | | | | |-- COMMA: , -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: CONV2 -| | | | `-- RPAREN: ) -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- IF: if -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- FloatConst: 1.5 -| | |-- RPAREN: ) -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: ok -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- IF: if -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- unaryOp -| | | | `-- NOT: ! -| | | `-- unaryExp -| | | |-- unaryOp -| | | | `-- NOT: ! -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- FloatConst: 3.3 -| | |-- RPAREN: ) -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: ok -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- IF: if -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | |-- lAndExp -| | | | `-- eqExp -| | | | `-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- FloatConst: .0 -| | | |-- AND: && -| | | `-- eqExp -| | | `-- relExp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 3 -| | |-- RPAREN: ) -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: error -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- IF: if -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | |-- lOrExp -| | | | `-- lAndExp -| | | | `-- eqExp -| | | | `-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 0 -| | | |-- OR: || -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- FloatConst: 0.3 -| | |-- RPAREN: ) -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: ok -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: i -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 1 -| | |-- COMMA: , -| | |-- varDef -| | | |-- Ident: p -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- FLOAT: float -| | |-- varDef -| | | |-- Ident: arr -| | | |-- LBRACK: [ -| | | |-- constExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 10 -| | | |-- RBRACK: ] -| | | |-- ASSIGN: = -| | | `-- initVal -| | | |-- LBRACE: { -| | | |-- initVal -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- FloatConst: 1. -| | | |-- COMMA: , -| | | |-- initVal -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 2 -| | | `-- RBRACE: } -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: len -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: getfarray -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: arr -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: MAX -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- decl -| | | `-- varDecl -| | | |-- bType -| | | | `-- FLOAT: float -| | | |-- varDef -| | | | |-- Ident: input -| | | | |-- ASSIGN: = -| | | | `-- initVal -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: getfloat -| | | | |-- LPAREN: ( -| | | | `-- RPAREN: ) -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- decl -| | | `-- varDecl -| | | |-- bType -| | | | `-- FLOAT: float -| | | |-- varDef -| | | | |-- Ident: area -| | | | |-- ASSIGN: = -| | | | `-- initVal -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | |-- mulExp -| | | | | |-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: PI -| | | | | |-- MUL: * -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: input -| | | | |-- MUL: * -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: input -| | | |-- COMMA: , -| | | |-- varDef -| | | | |-- Ident: area_trunc -| | | | |-- ASSIGN: = -| | | | `-- initVal -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: circle_area -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: input -| | | | `-- RPAREN: ) -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | |-- Ident: arr -| | | | |-- LBRACK: [ -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: p -| | | | `-- RBRACK: ] -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | |-- Ident: arr -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: p -| | | | | `-- RBRACK: ] -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: input -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: putfloat -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: area -| | | | `-- RPAREN: ) -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: putch -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 32 -| | | | `-- RPAREN: ) -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: putint -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: area_trunc -| | | | `-- RPAREN: ) -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: putch -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 10 -| | | | `-- RPAREN: ) -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | |-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- MUL: * -| | | | `-- unaryExp -| | | | |-- unaryOp -| | | | | `-- SUB: - -| | | | `-- unaryExp -| | | | |-- unaryOp -| | | | | `-- SUB: - -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- FloatConst: 1e1 -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: p -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: p -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: putfarray -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: len -| | | | |-- COMMA: , -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: arr -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- RETURN: return -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| `-- RBRACE: } -`-- EOF: +`-- funcDef + |-- funcType + | `-- INT: int + |-- Ident: main + |-- LPAREN: ( + |-- RPAREN: ) + `-- block + |-- LBRACE: { + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: assert_not + | | |-- LPAREN: ( + | | |-- funcRParams + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: float_eq + | | | |-- LPAREN: ( + | | | |-- funcRParams + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: HEX2 + | | | | |-- COMMA: , + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: FACT + | | | `-- RPAREN: ) + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: assert_not + | | |-- LPAREN: ( + | | |-- funcRParams + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: float_eq + | | | |-- LPAREN: ( + | | | |-- funcRParams + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: EVAL1 + | | | | |-- COMMA: , + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: EVAL2 + | | | `-- RPAREN: ) + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: assert + | | |-- LPAREN: ( + | | |-- funcRParams + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: float_eq + | | | |-- LPAREN: ( + | | | |-- funcRParams + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: EVAL2 + | | | | |-- COMMA: , + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: EVAL3 + | | | `-- RPAREN: ) + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: assert + | | |-- LPAREN: ( + | | |-- funcRParams + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: float_eq + | | | |-- LPAREN: ( + | | | |-- funcRParams + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | |-- Ident: circle_area + | | | | | |-- LPAREN: ( + | | | | | |-- funcRParams + | | | | | | `-- exp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: RADIUS + | | | | | `-- RPAREN: ) + | | | | |-- COMMA: , + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | |-- Ident: circle_area + | | | | |-- LPAREN: ( + | | | | |-- funcRParams + | | | | | `-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: FIVE + | | | | `-- RPAREN: ) + | | | `-- RPAREN: ) + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: assert_not + | | |-- LPAREN: ( + | | |-- funcRParams + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: float_eq + | | | |-- LPAREN: ( + | | | |-- funcRParams + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: CONV1 + | | | | |-- COMMA: , + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: CONV2 + | | | `-- RPAREN: ) + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- IF: if + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- FloatConst: 1.5 + | |-- RPAREN: ) + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: ok + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- IF: if + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- unaryOp + | | | `-- NOT: ! + | | `-- unaryExp + | | |-- unaryOp + | | | `-- NOT: ! + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- FloatConst: 3.3 + | |-- RPAREN: ) + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: ok + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- IF: if + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | |-- lAndExp + | | | `-- eqExp + | | | `-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- FloatConst: .0 + | | |-- AND: && + | | `-- eqExp + | | `-- relExp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 3 + | |-- RPAREN: ) + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: error + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- IF: if + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | |-- lOrExp + | | | `-- lAndExp + | | | `-- eqExp + | | | `-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 0 + | | |-- OR: || + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- FloatConst: 0.3 + | |-- RPAREN: ) + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: ok + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: i + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 1 + | |-- COMMA: , + | |-- varDef + | | |-- Ident: p + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- FLOAT: float + | |-- varDef + | | |-- Ident: arr + | | |-- LBRACK: [ + | | |-- constExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 10 + | | |-- RBRACK: ] + | | |-- ASSIGN: = + | | `-- initVal + | | |-- LBRACE: { + | | |-- initVal + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- FloatConst: 1. + | | |-- COMMA: , + | | |-- initVal + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 2 + | | `-- RBRACE: } + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: len + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: getfarray + | | |-- LPAREN: ( + | | |-- funcRParams + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: arr + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: MAX + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- decl + | | `-- varDecl + | | |-- bType + | | | `-- FLOAT: float + | | |-- varDef + | | | |-- Ident: input + | | | |-- ASSIGN: = + | | | `-- initVal + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: getfloat + | | | |-- LPAREN: ( + | | | `-- RPAREN: ) + | | `-- SEMI: ; + | |-- blockItem + | | `-- decl + | | `-- varDecl + | | |-- bType + | | | `-- FLOAT: float + | | |-- varDef + | | | |-- Ident: area + | | | |-- ASSIGN: = + | | | `-- initVal + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | |-- mulExp + | | | | |-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: PI + | | | | |-- MUL: * + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: input + | | | |-- MUL: * + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: input + | | |-- COMMA: , + | | |-- varDef + | | | |-- Ident: area_trunc + | | | |-- ASSIGN: = + | | | `-- initVal + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: circle_area + | | | |-- LPAREN: ( + | | | |-- funcRParams + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: input + | | | `-- RPAREN: ) + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | |-- Ident: arr + | | | |-- LBRACK: [ + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: p + | | | `-- RBRACK: ] + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | |-- Ident: arr + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: p + | | | | `-- RBRACK: ] + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: input + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: putfloat + | | | |-- LPAREN: ( + | | | |-- funcRParams + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: area + | | | `-- RPAREN: ) + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: putch + | | | |-- LPAREN: ( + | | | |-- funcRParams + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 32 + | | | `-- RPAREN: ) + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: putint + | | | |-- LPAREN: ( + | | | |-- funcRParams + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: area_trunc + | | | `-- RPAREN: ) + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: putch + | | | |-- LPAREN: ( + | | | |-- funcRParams + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 10 + | | | `-- RPAREN: ) + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | |-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- MUL: * + | | | `-- unaryExp + | | | |-- unaryOp + | | | | `-- SUB: - + | | | `-- unaryExp + | | | |-- unaryOp + | | | | `-- SUB: - + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- FloatConst: 1e1 + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: p + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: p + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: putfarray + | | |-- LPAREN: ( + | | |-- funcRParams + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: len + | | | |-- COMMA: , + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: arr + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- RETURN: return + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + `-- RBRACE: } diff --git a/output/lab1/fft0.tree b/output/lab1/fft0.tree index edb2bab..0a7aaf4 100644 --- a/output/lab1/fft0.tree +++ b/output/lab1/fft0.tree @@ -1466,708 +1466,707 @@ compUnit | | | `-- IntConst: 0 | | `-- SEMI: ; | `-- RBRACE: } -|-- funcDef -| |-- funcType -| | `-- INT: int -| |-- Ident: main -| |-- LPAREN: ( -| |-- RPAREN: ) -| `-- block -| |-- LBRACE: { -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: n -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: getarray -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: a -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: m -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: getarray -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: b -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: starttime -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: d -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 1 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: d -| | | |-- LT: < -| | | `-- addExp -| | | |-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: n -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: m -| | | |-- SUB: - -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 1 -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: d -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | |-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: d -| | | | |-- MUL: * -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 2 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: fft -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: a -| | | | |-- COMMA: , -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 0 -| | | | |-- COMMA: , -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: d -| | | | |-- COMMA: , -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: power -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- number -| | | | | | `-- IntConst: 3 -| | | | | |-- COMMA: , -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | |-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | |-- LPAREN: ( -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | |-- addExp -| | | | | | | | `-- mulExp -| | | | | | | | `-- unaryExp -| | | | | | | | `-- primaryExp -| | | | | | | | `-- lVal -| | | | | | | | `-- Ident: mod -| | | | | | | |-- SUB: - -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- number -| | | | | | | `-- IntConst: 1 -| | | | | | `-- RPAREN: ) -| | | | | |-- DIV: / -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: d -| | | | `-- RPAREN: ) -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: fft -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: b -| | | | |-- COMMA: , -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 0 -| | | | |-- COMMA: , -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: d -| | | | |-- COMMA: , -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: power -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- number -| | | | | | `-- IntConst: 3 -| | | | | |-- COMMA: , -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | |-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | |-- LPAREN: ( -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | |-- addExp -| | | | | | | | `-- mulExp -| | | | | | | | `-- unaryExp -| | | | | | | | `-- primaryExp -| | | | | | | | `-- lVal -| | | | | | | | `-- Ident: mod -| | | | | | | |-- SUB: - -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- number -| | | | | | | `-- IntConst: 1 -| | | | | | `-- RPAREN: ) -| | | | | |-- DIV: / -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: d -| | | | `-- RPAREN: ) -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: i -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: d -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | |-- Ident: a -| | | | |-- LBRACK: [ -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | `-- RBRACK: ] -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: multiply -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | |-- Ident: a -| | | | | | |-- LBRACK: [ -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: i -| | | | | | `-- RBRACK: ] -| | | | | |-- COMMA: , -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | |-- Ident: b -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: i -| | | | | `-- RBRACK: ] -| | | | `-- RPAREN: ) -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: fft -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: a -| | | | |-- COMMA: , -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 0 -| | | | |-- COMMA: , -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: d -| | | | |-- COMMA: , -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: power -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- number -| | | | | | `-- IntConst: 3 -| | | | | |-- COMMA: , -| | | | | `-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | |-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: mod -| | | | | | |-- SUB: - -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- number -| | | | | | `-- IntConst: 1 -| | | | | |-- SUB: - -| | | | | `-- mulExp -| | | | | |-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | |-- LPAREN: ( -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | |-- addExp -| | | | | | | | `-- mulExp -| | | | | | | | `-- unaryExp -| | | | | | | | `-- primaryExp -| | | | | | | | `-- lVal -| | | | | | | | `-- Ident: mod -| | | | | | | |-- SUB: - -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- number -| | | | | | | `-- IntConst: 1 -| | | | | | `-- RPAREN: ) -| | | | | |-- DIV: / -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: d -| | | | `-- RPAREN: ) -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: i -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: d -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | |-- Ident: a -| | | | |-- LBRACK: [ -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | `-- RBRACK: ] -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: multiply -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | |-- Ident: a -| | | | | | |-- LBRACK: [ -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: i -| | | | | | `-- RBRACK: ] -| | | | | |-- COMMA: , -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | |-- Ident: power -| | | | | |-- LPAREN: ( -| | | | | |-- funcRParams -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: d -| | | | | | |-- COMMA: , -| | | | | | `-- exp -| | | | | | `-- addExp -| | | | | | |-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: mod -| | | | | | |-- SUB: - -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- number -| | | | | | `-- IntConst: 2 -| | | | | `-- RPAREN: ) -| | | | `-- RPAREN: ) -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: stoptime -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: putarray -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | |-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: n -| | | | | | |-- ADD: + -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: m -| | | | | |-- SUB: - -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | |-- COMMA: , -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: a -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- RETURN: return -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| `-- RBRACE: } -`-- EOF: +`-- funcDef + |-- funcType + | `-- INT: int + |-- Ident: main + |-- LPAREN: ( + |-- RPAREN: ) + `-- block + |-- LBRACE: { + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: n + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: getarray + | | |-- LPAREN: ( + | | |-- funcRParams + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: a + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: m + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: getarray + | | |-- LPAREN: ( + | | |-- funcRParams + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: b + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: starttime + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: d + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 1 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: d + | | |-- LT: < + | | `-- addExp + | | |-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: n + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: m + | | |-- SUB: - + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 1 + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: d + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | |-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: d + | | | |-- MUL: * + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 2 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: fft + | | |-- LPAREN: ( + | | |-- funcRParams + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: a + | | | |-- COMMA: , + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 0 + | | | |-- COMMA: , + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: d + | | | |-- COMMA: , + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: power + | | | |-- LPAREN: ( + | | | |-- funcRParams + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- number + | | | | | `-- IntConst: 3 + | | | | |-- COMMA: , + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | |-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | |-- LPAREN: ( + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | |-- addExp + | | | | | | | `-- mulExp + | | | | | | | `-- unaryExp + | | | | | | | `-- primaryExp + | | | | | | | `-- lVal + | | | | | | | `-- Ident: mod + | | | | | | |-- SUB: - + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- number + | | | | | | `-- IntConst: 1 + | | | | | `-- RPAREN: ) + | | | | |-- DIV: / + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: d + | | | `-- RPAREN: ) + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: fft + | | |-- LPAREN: ( + | | |-- funcRParams + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: b + | | | |-- COMMA: , + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 0 + | | | |-- COMMA: , + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: d + | | | |-- COMMA: , + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: power + | | | |-- LPAREN: ( + | | | |-- funcRParams + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- number + | | | | | `-- IntConst: 3 + | | | | |-- COMMA: , + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | |-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | |-- LPAREN: ( + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | |-- addExp + | | | | | | | `-- mulExp + | | | | | | | `-- unaryExp + | | | | | | | `-- primaryExp + | | | | | | | `-- lVal + | | | | | | | `-- Ident: mod + | | | | | | |-- SUB: - + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- number + | | | | | | `-- IntConst: 1 + | | | | | `-- RPAREN: ) + | | | | |-- DIV: / + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: d + | | | `-- RPAREN: ) + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: i + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: d + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | |-- Ident: a + | | | |-- LBRACK: [ + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | `-- RBRACK: ] + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: multiply + | | | |-- LPAREN: ( + | | | |-- funcRParams + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | |-- Ident: a + | | | | | |-- LBRACK: [ + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: i + | | | | | `-- RBRACK: ] + | | | | |-- COMMA: , + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | |-- Ident: b + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: i + | | | | `-- RBRACK: ] + | | | `-- RPAREN: ) + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: fft + | | |-- LPAREN: ( + | | |-- funcRParams + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: a + | | | |-- COMMA: , + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 0 + | | | |-- COMMA: , + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: d + | | | |-- COMMA: , + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: power + | | | |-- LPAREN: ( + | | | |-- funcRParams + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- number + | | | | | `-- IntConst: 3 + | | | | |-- COMMA: , + | | | | `-- exp + | | | | `-- addExp + | | | | |-- addExp + | | | | | |-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: mod + | | | | | |-- SUB: - + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- number + | | | | | `-- IntConst: 1 + | | | | |-- SUB: - + | | | | `-- mulExp + | | | | |-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | |-- LPAREN: ( + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | |-- addExp + | | | | | | | `-- mulExp + | | | | | | | `-- unaryExp + | | | | | | | `-- primaryExp + | | | | | | | `-- lVal + | | | | | | | `-- Ident: mod + | | | | | | |-- SUB: - + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- number + | | | | | | `-- IntConst: 1 + | | | | | `-- RPAREN: ) + | | | | |-- DIV: / + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: d + | | | `-- RPAREN: ) + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: i + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: d + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | |-- Ident: a + | | | |-- LBRACK: [ + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | `-- RBRACK: ] + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: multiply + | | | |-- LPAREN: ( + | | | |-- funcRParams + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | |-- Ident: a + | | | | | |-- LBRACK: [ + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: i + | | | | | `-- RBRACK: ] + | | | | |-- COMMA: , + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | |-- Ident: power + | | | | |-- LPAREN: ( + | | | | |-- funcRParams + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: d + | | | | | |-- COMMA: , + | | | | | `-- exp + | | | | | `-- addExp + | | | | | |-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: mod + | | | | | |-- SUB: - + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- number + | | | | | `-- IntConst: 2 + | | | | `-- RPAREN: ) + | | | `-- RPAREN: ) + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: stoptime + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: putarray + | | |-- LPAREN: ( + | | |-- funcRParams + | | | |-- exp + | | | | `-- addExp + | | | | |-- addExp + | | | | | |-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: n + | | | | | |-- ADD: + + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: m + | | | | |-- SUB: - + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 1 + | | | |-- COMMA: , + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: a + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- RETURN: return + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + `-- RBRACE: } diff --git a/output/lab1/gameoflife-oscillator.tree b/output/lab1/gameoflife-oscillator.tree index f3c7a28..7cd9cd1 100644 --- a/output/lab1/gameoflife-oscillator.tree +++ b/output/lab1/gameoflife-oscillator.tree @@ -1548,263 +1548,262 @@ compUnit | | | `-- SEMI: ; | | `-- RBRACE: } | `-- RBRACE: } -|-- funcDef -| |-- funcType -| | `-- INT: int -| |-- Ident: main -| |-- LPAREN: ( -| |-- RPAREN: ) -| `-- block -| |-- LBRACE: { -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: read_map -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: starttime -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: steps -| | | |-- GT: > -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- IF: if -| | | |-- LPAREN: ( -| | | |-- cond -| | | | `-- lOrExp -| | | | `-- lAndExp -| | | | `-- eqExp -| | | | |-- eqExp -| | | | | `-- relExp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: active -| | | | |-- EQ: == -| | | | `-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | |-- RPAREN: ) -| | | |-- stmt -| | | | `-- block -| | | | |-- LBRACE: { -| | | | |-- blockItem -| | | | | `-- stmt -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | |-- Ident: step -| | | | | | |-- LPAREN: ( -| | | | | | |-- funcRParams -| | | | | | | |-- exp -| | | | | | | | `-- addExp -| | | | | | | | `-- mulExp -| | | | | | | | `-- unaryExp -| | | | | | | | `-- primaryExp -| | | | | | | | `-- lVal -| | | | | | | | `-- Ident: sheet1 -| | | | | | | |-- COMMA: , -| | | | | | | `-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: sheet2 -| | | | | | `-- RPAREN: ) -| | | | | `-- SEMI: ; -| | | | |-- blockItem -| | | | | `-- stmt -| | | | | |-- lVal -| | | | | | `-- Ident: active -| | | | | |-- ASSIGN: = -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- number -| | | | | | `-- IntConst: 2 -| | | | | `-- SEMI: ; -| | | | `-- RBRACE: } -| | | |-- ELSE: else -| | | `-- stmt -| | | `-- block -| | | |-- LBRACE: { -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | |-- Ident: step -| | | | | |-- LPAREN: ( -| | | | | |-- funcRParams -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: sheet2 -| | | | | | |-- COMMA: , -| | | | | | `-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: sheet1 -| | | | | `-- RPAREN: ) -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | `-- Ident: active -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | `-- SEMI: ; -| | | `-- RBRACE: } -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: steps -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: steps -| | | | |-- SUB: - -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: stoptime -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- IF: if -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | |-- eqExp -| | | | `-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: active -| | | |-- EQ: == -| | | `-- relExp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 2 -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: swap12 -| | | | |-- LPAREN: ( -| | | | `-- RPAREN: ) -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: put_map -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- RETURN: return -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| `-- RBRACE: } -`-- EOF: +`-- funcDef + |-- funcType + | `-- INT: int + |-- Ident: main + |-- LPAREN: ( + |-- RPAREN: ) + `-- block + |-- LBRACE: { + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: read_map + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: starttime + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: steps + | | |-- GT: > + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- IF: if + | | |-- LPAREN: ( + | | |-- cond + | | | `-- lOrExp + | | | `-- lAndExp + | | | `-- eqExp + | | | |-- eqExp + | | | | `-- relExp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: active + | | | |-- EQ: == + | | | `-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | |-- RPAREN: ) + | | |-- stmt + | | | `-- block + | | | |-- LBRACE: { + | | | |-- blockItem + | | | | `-- stmt + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | |-- Ident: step + | | | | | |-- LPAREN: ( + | | | | | |-- funcRParams + | | | | | | |-- exp + | | | | | | | `-- addExp + | | | | | | | `-- mulExp + | | | | | | | `-- unaryExp + | | | | | | | `-- primaryExp + | | | | | | | `-- lVal + | | | | | | | `-- Ident: sheet1 + | | | | | | |-- COMMA: , + | | | | | | `-- exp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: sheet2 + | | | | | `-- RPAREN: ) + | | | | `-- SEMI: ; + | | | |-- blockItem + | | | | `-- stmt + | | | | |-- lVal + | | | | | `-- Ident: active + | | | | |-- ASSIGN: = + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- number + | | | | | `-- IntConst: 2 + | | | | `-- SEMI: ; + | | | `-- RBRACE: } + | | |-- ELSE: else + | | `-- stmt + | | `-- block + | | |-- LBRACE: { + | | |-- blockItem + | | | `-- stmt + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | |-- Ident: step + | | | | |-- LPAREN: ( + | | | | |-- funcRParams + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: sheet2 + | | | | | |-- COMMA: , + | | | | | `-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: sheet1 + | | | | `-- RPAREN: ) + | | | `-- SEMI: ; + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | `-- Ident: active + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 1 + | | | `-- SEMI: ; + | | `-- RBRACE: } + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: steps + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: steps + | | | |-- SUB: - + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: stoptime + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- IF: if + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | |-- eqExp + | | | `-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: active + | | |-- EQ: == + | | `-- relExp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 2 + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: swap12 + | | | |-- LPAREN: ( + | | | `-- RPAREN: ) + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: put_map + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- RETURN: return + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + `-- RBRACE: } diff --git a/output/lab1/if-combine3.tree b/output/lab1/if-combine3.tree index b1ff0c4..1365686 100644 --- a/output/lab1/if-combine3.tree +++ b/output/lab1/if-combine3.tree @@ -5290,105 +5290,104 @@ compUnit | | | `-- Ident: sum | | `-- SEMI: ; | `-- RBRACE: } -|-- funcDef -| |-- funcType -| | `-- INT: int -| |-- Ident: main -| |-- LPAREN: ( -| |-- RPAREN: ) -| `-- block -| |-- LBRACE: { -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: starttime -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: loopcount -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: getint -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: putint -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: func -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: loopcount -| | | | `-- RPAREN: ) -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: putch -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 10 -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: stoptime -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- RETURN: return -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| `-- RBRACE: } -`-- EOF: +`-- funcDef + |-- funcType + | `-- INT: int + |-- Ident: main + |-- LPAREN: ( + |-- RPAREN: ) + `-- block + |-- LBRACE: { + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: starttime + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: loopcount + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: getint + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: putint + | | |-- LPAREN: ( + | | |-- funcRParams + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: func + | | | |-- LPAREN: ( + | | | |-- funcRParams + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: loopcount + | | | `-- RPAREN: ) + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: putch + | | |-- LPAREN: ( + | | |-- funcRParams + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 10 + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: stoptime + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- RETURN: return + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + `-- RBRACE: } diff --git a/output/lab1/large_loop_array_2.tree b/output/lab1/large_loop_array_2.tree index da72747..6adde8d 100644 --- a/output/lab1/large_loop_array_2.tree +++ b/output/lab1/large_loop_array_2.tree @@ -180,600 +180,599 @@ compUnit | | | `-- Ident: accumulator | | `-- SEMI: ; | `-- RBRACE: } -|-- funcDef -| |-- funcType -| | `-- INT: int -| |-- Ident: main -| |-- LPAREN: ( -| |-- RPAREN: ) -| `-- block -| |-- LBRACE: { -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: i -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | |-- COMMA: , -| | |-- varDef -| | | |-- Ident: j -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: len -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: getint -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- FLOAT: float -| | |-- varDef -| | | |-- Ident: x -| | | |-- LBRACK: [ -| | | |-- constExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 4096 -| | | `-- RBRACK: ] -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- FLOAT: float -| | |-- varDef -| | | |-- Ident: y -| | | |-- LBRACK: [ -| | | |-- constExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 4096 -| | | `-- RBRACK: ] -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- FLOAT: float -| | |-- varDef -| | | |-- Ident: total -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- FloatConst: 0.0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- FLOAT: float -| | |-- varDef -| | | |-- Ident: a -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- FloatConst: 0.0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- FLOAT: float -| | |-- varDef -| | | |-- Ident: b -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- FloatConst: 1.0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: starttime -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: COUNT -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- IF: if -| | | |-- LPAREN: ( -| | | |-- cond -| | | | `-- lOrExp -| | | | `-- lAndExp -| | | | `-- eqExp -| | | | `-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | |-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- MOD: % -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 10 -| | | |-- RPAREN: ) -| | | |-- stmt -| | | | `-- block -| | | | |-- LBRACE: { -| | | | |-- blockItem -| | | | | `-- stmt -| | | | | |-- lVal -| | | | | | `-- Ident: a -| | | | | |-- ASSIGN: = -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- number -| | | | | | `-- FloatConst: 0.0 -| | | | | `-- SEMI: ; -| | | | |-- blockItem -| | | | | `-- stmt -| | | | | |-- lVal -| | | | | | `-- Ident: b -| | | | | |-- ASSIGN: = -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- number -| | | | | | `-- FloatConst: 1.0 -| | | | | `-- SEMI: ; -| | | | `-- RBRACE: } -| | | |-- ELSE: else -| | | `-- stmt -| | | `-- block -| | | |-- LBRACE: { -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | `-- Ident: a -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: a -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- FloatConst: 0.1 -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | `-- Ident: b -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: b -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- FloatConst: 0.2 -| | | | `-- SEMI: ; -| | | `-- RBRACE: } -| | |-- blockItem -| | | `-- stmt -| | | |-- WHILE: while -| | | |-- LPAREN: ( -| | | |-- cond -| | | | `-- lOrExp -| | | | `-- lAndExp -| | | | `-- eqExp -| | | | `-- relExp -| | | | |-- relExp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: j -| | | | |-- LT: < -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: len -| | | |-- RPAREN: ) -| | | `-- stmt -| | | `-- block -| | | |-- LBRACE: { -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | |-- Ident: x -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | `-- RBRACK: ] -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: a -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: j -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | |-- Ident: y -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | `-- RBRACK: ] -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: b -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: j -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | `-- Ident: j -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | `-- SEMI: ; -| | | `-- RBRACE: } -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: total -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: total -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: loop -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: x -| | | | | |-- COMMA: , -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: y -| | | | | |-- COMMA: , -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: len -| | | | `-- RPAREN: ) -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: stoptime -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- IF: if -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | |-- lOrExp -| | | | `-- lAndExp -| | | | `-- eqExp -| | | | `-- relExp -| | | | |-- relExp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | |-- LPAREN: ( -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | |-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: total -| | | | | | |-- SUB: - -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- number -| | | | | | `-- FloatConst: 11442437121638400.000000 -| | | | | `-- RPAREN: ) -| | | | |-- LE: <= -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- FloatConst: 0.000001 -| | | |-- OR: || -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | |-- LPAREN: ( -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: total -| | | | | |-- SUB: - -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- FloatConst: 11442437121638400.000000 -| | | | `-- RPAREN: ) -| | | |-- GE: >= -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- unaryOp -| | | | `-- SUB: - -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- FloatConst: 0.000001 -| | |-- RPAREN: ) -| | |-- stmt -| | | `-- block -| | | |-- LBRACE: { -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | |-- Ident: putint -| | | | | |-- LPAREN: ( -| | | | | |-- funcRParams -| | | | | | `-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- number -| | | | | | `-- IntConst: 0 -| | | | | `-- RPAREN: ) -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- RETURN: return -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 0 -| | | | `-- SEMI: ; -| | | `-- RBRACE: } -| | |-- ELSE: else -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: putint -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | `-- RPAREN: ) -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- RETURN: return -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| `-- RBRACE: } -`-- EOF: +`-- funcDef + |-- funcType + | `-- INT: int + |-- Ident: main + |-- LPAREN: ( + |-- RPAREN: ) + `-- block + |-- LBRACE: { + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: i + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | |-- COMMA: , + | |-- varDef + | | |-- Ident: j + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: len + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: getint + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- FLOAT: float + | |-- varDef + | | |-- Ident: x + | | |-- LBRACK: [ + | | |-- constExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 4096 + | | `-- RBRACK: ] + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- FLOAT: float + | |-- varDef + | | |-- Ident: y + | | |-- LBRACK: [ + | | |-- constExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 4096 + | | `-- RBRACK: ] + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- FLOAT: float + | |-- varDef + | | |-- Ident: total + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- FloatConst: 0.0 + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- FLOAT: float + | |-- varDef + | | |-- Ident: a + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- FloatConst: 0.0 + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- FLOAT: float + | |-- varDef + | | |-- Ident: b + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- FloatConst: 1.0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: starttime + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: COUNT + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- IF: if + | | |-- LPAREN: ( + | | |-- cond + | | | `-- lOrExp + | | | `-- lAndExp + | | | `-- eqExp + | | | `-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | |-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- MOD: % + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 10 + | | |-- RPAREN: ) + | | |-- stmt + | | | `-- block + | | | |-- LBRACE: { + | | | |-- blockItem + | | | | `-- stmt + | | | | |-- lVal + | | | | | `-- Ident: a + | | | | |-- ASSIGN: = + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- number + | | | | | `-- FloatConst: 0.0 + | | | | `-- SEMI: ; + | | | |-- blockItem + | | | | `-- stmt + | | | | |-- lVal + | | | | | `-- Ident: b + | | | | |-- ASSIGN: = + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- number + | | | | | `-- FloatConst: 1.0 + | | | | `-- SEMI: ; + | | | `-- RBRACE: } + | | |-- ELSE: else + | | `-- stmt + | | `-- block + | | |-- LBRACE: { + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | `-- Ident: a + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | |-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: a + | | | | |-- ADD: + + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- FloatConst: 0.1 + | | | `-- SEMI: ; + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | `-- Ident: b + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | |-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: b + | | | | |-- ADD: + + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- FloatConst: 0.2 + | | | `-- SEMI: ; + | | `-- RBRACE: } + | |-- blockItem + | | `-- stmt + | | |-- WHILE: while + | | |-- LPAREN: ( + | | |-- cond + | | | `-- lOrExp + | | | `-- lAndExp + | | | `-- eqExp + | | | `-- relExp + | | | |-- relExp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: j + | | | |-- LT: < + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: len + | | |-- RPAREN: ) + | | `-- stmt + | | `-- block + | | |-- LBRACE: { + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | |-- Ident: x + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: j + | | | | `-- RBRACK: ] + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | |-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: a + | | | | |-- ADD: + + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: j + | | | `-- SEMI: ; + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | |-- Ident: y + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: j + | | | | `-- RBRACK: ] + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | |-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: b + | | | | |-- ADD: + + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: j + | | | `-- SEMI: ; + | | |-- blockItem + | | | `-- stmt + | | | |-- lVal + | | | | `-- Ident: j + | | | |-- ASSIGN: = + | | | |-- exp + | | | | `-- addExp + | | | | |-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: j + | | | | |-- ADD: + + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 1 + | | | `-- SEMI: ; + | | `-- RBRACE: } + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: total + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: total + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: loop + | | | |-- LPAREN: ( + | | | |-- funcRParams + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: x + | | | | |-- COMMA: , + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: y + | | | | |-- COMMA: , + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: len + | | | `-- RPAREN: ) + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: stoptime + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- IF: if + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | |-- lOrExp + | | | `-- lAndExp + | | | `-- eqExp + | | | `-- relExp + | | | |-- relExp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | |-- LPAREN: ( + | | | | |-- exp + | | | | | `-- addExp + | | | | | |-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: total + | | | | | |-- SUB: - + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- number + | | | | | `-- FloatConst: 11442437121638400.000000 + | | | | `-- RPAREN: ) + | | | |-- LE: <= + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- FloatConst: 0.000001 + | | |-- OR: || + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | |-- LPAREN: ( + | | | |-- exp + | | | | `-- addExp + | | | | |-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: total + | | | | |-- SUB: - + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- FloatConst: 11442437121638400.000000 + | | | `-- RPAREN: ) + | | |-- GE: >= + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- unaryOp + | | | `-- SUB: - + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- FloatConst: 0.000001 + | |-- RPAREN: ) + | |-- stmt + | | `-- block + | | |-- LBRACE: { + | | |-- blockItem + | | | `-- stmt + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | |-- Ident: putint + | | | | |-- LPAREN: ( + | | | | |-- funcRParams + | | | | | `-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- number + | | | | | `-- IntConst: 0 + | | | | `-- RPAREN: ) + | | | `-- SEMI: ; + | | |-- blockItem + | | | `-- stmt + | | | |-- RETURN: return + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 0 + | | | `-- SEMI: ; + | | `-- RBRACE: } + | |-- ELSE: else + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: putint + | | | |-- LPAREN: ( + | | | |-- funcRParams + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 1 + | | | `-- RPAREN: ) + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- RETURN: return + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + `-- RBRACE: } diff --git a/output/lab1/simple_add.tree b/output/lab1/simple_add.tree index e36bb59..3bf46d0 100644 --- a/output/lab1/simple_add.tree +++ b/output/lab1/simple_add.tree @@ -1,63 +1,62 @@ compUnit -|-- funcDef -| |-- funcType -| | `-- INT: int -| |-- Ident: main -| |-- LPAREN: ( -| |-- RPAREN: ) -| `-- block -| |-- LBRACE: { -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: a -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 1 -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: b -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 2 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- RETURN: return -| | |-- exp -| | | `-- addExp -| | | |-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: a -| | | |-- ADD: + -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: b -| | `-- SEMI: ; -| `-- RBRACE: } -`-- EOF: +`-- funcDef + |-- funcType + | `-- INT: int + |-- Ident: main + |-- LPAREN: ( + |-- RPAREN: ) + `-- block + |-- LBRACE: { + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: a + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 1 + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: b + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 2 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- RETURN: return + | |-- exp + | | `-- addExp + | | |-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: a + | | |-- ADD: + + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: b + | `-- SEMI: ; + `-- RBRACE: } diff --git a/output/lab1/transpose0.tree b/output/lab1/transpose0.tree index 4fefe00..ee46146 100644 --- a/output/lab1/transpose0.tree +++ b/output/lab1/transpose0.tree @@ -420,471 +420,470 @@ compUnit | | | `-- IntConst: 1 | | `-- SEMI: ; | `-- RBRACE: } -|-- funcDef -| |-- funcType -| | `-- INT: int -| |-- Ident: main -| |-- LPAREN: ( -| |-- RPAREN: ) -| `-- block -| |-- LBRACE: { -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: n -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: getint -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: len -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: getarray -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: a -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: starttime -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: i -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: n -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | |-- Ident: matrix -| | | | |-- LBRACK: [ -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | `-- RBRACK: ] -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: i -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: len -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: transpose -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: n -| | | | | |-- COMMA: , -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: matrix -| | | | | |-- COMMA: , -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | |-- Ident: a -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: i -| | | | | `-- RBRACK: ] -| | | | `-- RPAREN: ) -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: ans -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: i -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: len -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: ans -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: ans -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | |-- mulExp -| | | | | |-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: i -| | | | | |-- MUL: * -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- MUL: * -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | |-- Ident: matrix -| | | | |-- LBRACK: [ -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | `-- RBRACK: ] -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- IF: if -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: ans -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | |-- RPAREN: ) -| | `-- stmt -| | |-- lVal -| | | `-- Ident: ans -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- unaryOp -| | | | `-- SUB: - -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: ans -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: stoptime -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: putint -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: ans -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: putch -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 10 -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- RETURN: return -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| `-- RBRACE: } -`-- EOF: +`-- funcDef + |-- funcType + | `-- INT: int + |-- Ident: main + |-- LPAREN: ( + |-- RPAREN: ) + `-- block + |-- LBRACE: { + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: n + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: getint + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: len + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: getarray + | | |-- LPAREN: ( + | | |-- funcRParams + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: a + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: starttime + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: i + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: n + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | |-- Ident: matrix + | | | |-- LBRACK: [ + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | `-- RBRACK: ] + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: i + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: len + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: transpose + | | | |-- LPAREN: ( + | | | |-- funcRParams + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: n + | | | | |-- COMMA: , + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: matrix + | | | | |-- COMMA: , + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | |-- Ident: a + | | | | |-- LBRACK: [ + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: i + | | | | `-- RBRACK: ] + | | | `-- RPAREN: ) + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: ans + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: i + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: len + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: ans + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: ans + | | | |-- ADD: + + | | | `-- mulExp + | | | |-- mulExp + | | | | |-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: i + | | | | |-- MUL: * + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- MUL: * + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | |-- Ident: matrix + | | | |-- LBRACK: [ + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | `-- RBRACK: ] + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- IF: if + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: ans + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | |-- RPAREN: ) + | `-- stmt + | |-- lVal + | | `-- Ident: ans + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- unaryOp + | | | `-- SUB: - + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: ans + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: stoptime + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: putint + | | |-- LPAREN: ( + | | |-- funcRParams + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: ans + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: putch + | | |-- LPAREN: ( + | | |-- funcRParams + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 10 + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- RETURN: return + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + `-- RBRACE: } diff --git a/output/lab1/tree.txt b/output/lab1/tree.txt deleted file mode 100644 index 80e165e..0000000 --- a/output/lab1/tree.txt +++ /dev/null @@ -1,1573 +0,0 @@ -compUnit -|-- funcDef -| |-- funcType -| | `-- INT: int -| |-- Ident: func -| |-- LPAREN: ( -| |-- funcFParams -| | |-- funcFParam -| | | |-- bType -| | | | `-- INT: int -| | | `-- Ident: i -| | |-- COMMA: , -| | `-- funcFParam -| | |-- bType -| | | `-- INT: int -| | `-- Ident: j -| |-- RPAREN: ) -| `-- block -| |-- LBRACE: { -| |-- blockItem -| | `-- stmt -| | |-- RETURN: return -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | |-- LPAREN: ( -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | |-- mulExp -| | | | | | | |-- mulExp -| | | | | | | | `-- unaryExp -| | | | | | | | `-- primaryExp -| | | | | | | | |-- LPAREN: ( -| | | | | | | | |-- exp -| | | | | | | | | `-- addExp -| | | | | | | | | |-- addExp -| | | | | | | | | | `-- mulExp -| | | | | | | | | | `-- unaryExp -| | | | | | | | | | `-- primaryExp -| | | | | | | | | | `-- lVal -| | | | | | | | | | `-- Ident: i -| | | | | | | | | |-- ADD: + -| | | | | | | | | `-- mulExp -| | | | | | | | | `-- unaryExp -| | | | | | | | | `-- primaryExp -| | | | | | | | | `-- lVal -| | | | | | | | | `-- Ident: j -| | | | | | | | `-- RPAREN: ) -| | | | | | | |-- MUL: * -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | |-- LPAREN: ( -| | | | | | | |-- exp -| | | | | | | | `-- addExp -| | | | | | | | |-- addExp -| | | | | | | | | |-- addExp -| | | | | | | | | | `-- mulExp -| | | | | | | | | | `-- unaryExp -| | | | | | | | | | `-- primaryExp -| | | | | | | | | | `-- lVal -| | | | | | | | | | `-- Ident: i -| | | | | | | | | |-- ADD: + -| | | | | | | | | `-- mulExp -| | | | | | | | | `-- unaryExp -| | | | | | | | | `-- primaryExp -| | | | | | | | | `-- lVal -| | | | | | | | | `-- Ident: j -| | | | | | | | |-- ADD: + -| | | | | | | | `-- mulExp -| | | | | | | | `-- unaryExp -| | | | | | | | `-- primaryExp -| | | | | | | | `-- number -| | | | | | | | `-- IntConst: 1 -| | | | | | | `-- RPAREN: ) -| | | | | | |-- DIV: / -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- number -| | | | | | `-- IntConst: 2 -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| `-- RBRACE: } -|-- funcDef -| |-- funcType -| | `-- FLOAT: float -| |-- Ident: Vectordot -| |-- LPAREN: ( -| |-- funcFParams -| | |-- funcFParam -| | | |-- bType -| | | | `-- FLOAT: float -| | | |-- Ident: v -| | | |-- LBRACK: [ -| | | `-- RBRACK: ] -| | |-- COMMA: , -| | |-- funcFParam -| | | |-- bType -| | | | `-- FLOAT: float -| | | |-- Ident: u -| | | |-- LBRACK: [ -| | | `-- RBRACK: ] -| | |-- COMMA: , -| | `-- funcFParam -| | |-- bType -| | | `-- INT: int -| | `-- Ident: n -| |-- RPAREN: ) -| `-- block -| |-- LBRACE: { -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: i -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- FLOAT: float -| | |-- varDef -| | | |-- Ident: sum -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: n -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: sum -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: sum -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | |-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | |-- Ident: v -| | | | | |-- LBRACK: [ -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: i -| | | | | `-- RBRACK: ] -| | | | |-- MUL: * -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | |-- Ident: u -| | | | |-- LBRACK: [ -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | `-- RBRACK: ] -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- RETURN: return -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: sum -| | `-- SEMI: ; -| `-- RBRACE: } -|-- funcDef -| |-- funcType -| | `-- VOID: void -| |-- Ident: mult1 -| |-- LPAREN: ( -| |-- funcFParams -| | |-- funcFParam -| | | |-- bType -| | | | `-- FLOAT: float -| | | |-- Ident: v -| | | |-- LBRACK: [ -| | | `-- RBRACK: ] -| | |-- COMMA: , -| | |-- funcFParam -| | | |-- bType -| | | | `-- FLOAT: float -| | | |-- Ident: out -| | | |-- LBRACK: [ -| | | `-- RBRACK: ] -| | |-- COMMA: , -| | `-- funcFParam -| | |-- bType -| | | `-- INT: int -| | `-- Ident: n -| |-- RPAREN: ) -| `-- block -| |-- LBRACE: { -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: i -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | |-- COMMA: , -| | |-- varDef -| | | |-- Ident: j -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- FLOAT: float -| | |-- varDef -| | | |-- Ident: sum -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: n -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- WHILE: while -| | | |-- LPAREN: ( -| | | |-- cond -| | | | `-- lOrExp -| | | | `-- lAndExp -| | | | `-- eqExp -| | | | `-- relExp -| | | | |-- relExp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: j -| | | | |-- LT: < -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: n -| | | |-- RPAREN: ) -| | | `-- stmt -| | | `-- block -| | | |-- LBRACE: { -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | `-- Ident: sum -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: sum -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | |-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | |-- Ident: v -| | | | | | |-- LBRACK: [ -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: j -| | | | | | `-- RBRACK: ] -| | | | | |-- DIV: / -| | | | | `-- unaryExp -| | | | | |-- Ident: func -| | | | | |-- LPAREN: ( -| | | | | |-- funcRParams -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: i -| | | | | | |-- COMMA: , -| | | | | | `-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | `-- RPAREN: ) -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | `-- Ident: j -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | `-- SEMI: ; -| | | `-- RBRACE: } -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | |-- Ident: out -| | | | |-- LBRACK: [ -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | `-- RBRACK: ] -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: sum -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| `-- RBRACE: } -|-- funcDef -| |-- funcType -| | `-- VOID: void -| |-- Ident: mult2 -| |-- LPAREN: ( -| |-- funcFParams -| | |-- funcFParam -| | | |-- bType -| | | | `-- FLOAT: float -| | | |-- Ident: v -| | | |-- LBRACK: [ -| | | `-- RBRACK: ] -| | |-- COMMA: , -| | |-- funcFParam -| | | |-- bType -| | | | `-- FLOAT: float -| | | |-- Ident: out -| | | |-- LBRACK: [ -| | | `-- RBRACK: ] -| | |-- COMMA: , -| | `-- funcFParam -| | |-- bType -| | | `-- INT: int -| | `-- Ident: n -| |-- RPAREN: ) -| `-- block -| |-- LBRACE: { -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: i -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | |-- COMMA: , -| | |-- varDef -| | | |-- Ident: j -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- FLOAT: float -| | |-- varDef -| | | |-- Ident: sum -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: n -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- WHILE: while -| | | |-- LPAREN: ( -| | | |-- cond -| | | | `-- lOrExp -| | | | `-- lAndExp -| | | | `-- eqExp -| | | | `-- relExp -| | | | |-- relExp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: j -| | | | |-- LT: < -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: n -| | | |-- RPAREN: ) -| | | `-- stmt -| | | `-- block -| | | |-- LBRACE: { -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | `-- Ident: sum -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: sum -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | |-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | |-- Ident: v -| | | | | | |-- LBRACK: [ -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: j -| | | | | | `-- RBRACK: ] -| | | | | |-- DIV: / -| | | | | `-- unaryExp -| | | | | |-- Ident: func -| | | | | |-- LPAREN: ( -| | | | | |-- funcRParams -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: j -| | | | | | |-- COMMA: , -| | | | | | `-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: i -| | | | | `-- RPAREN: ) -| | | | `-- SEMI: ; -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- lVal -| | | | | `-- Ident: j -| | | | |-- ASSIGN: = -| | | | |-- exp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: j -| | | | | |-- ADD: + -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 1 -| | | | `-- SEMI: ; -| | | `-- RBRACE: } -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | |-- Ident: out -| | | | |-- LBRACK: [ -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | `-- RBRACK: ] -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: sum -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| `-- RBRACE: } -|-- funcDef -| |-- funcType -| | `-- VOID: void -| |-- Ident: mult_combin -| |-- LPAREN: ( -| |-- funcFParams -| | |-- funcFParam -| | | |-- bType -| | | | `-- FLOAT: float -| | | |-- Ident: v -| | | |-- LBRACK: [ -| | | `-- RBRACK: ] -| | |-- COMMA: , -| | |-- funcFParam -| | | |-- bType -| | | | `-- FLOAT: float -| | | |-- Ident: out -| | | |-- LBRACK: [ -| | | `-- RBRACK: ] -| | |-- COMMA: , -| | |-- funcFParam -| | | |-- bType -| | | | `-- INT: int -| | | `-- Ident: n -| | |-- COMMA: , -| | `-- funcFParam -| | |-- bType -| | | `-- FLOAT: float -| | |-- Ident: tmp -| | |-- LBRACK: [ -| | `-- RBRACK: ] -| |-- RPAREN: ) -| `-- block -| |-- LBRACE: { -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: mult1 -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: v -| | | | |-- COMMA: , -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: tmp -| | | | |-- COMMA: , -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: n -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: mult2 -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: tmp -| | | | |-- COMMA: , -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: out -| | | | |-- COMMA: , -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: n -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| `-- RBRACE: } -|-- decl -| `-- varDecl -| |-- bType -| | `-- FLOAT: float -| |-- varDef -| | |-- Ident: temp -| | |-- ASSIGN: = -| | `-- initVal -| | `-- exp -| | `-- addExp -| | `-- mulExp -| | `-- unaryExp -| | `-- primaryExp -| | `-- number -| | `-- IntConst: 1 -| `-- SEMI: ; -|-- funcDef -| |-- funcType -| | `-- FLOAT: float -| |-- Ident: my_sqrt -| |-- LPAREN: ( -| |-- funcFParams -| | `-- funcFParam -| | |-- bType -| | | `-- FLOAT: float -| | `-- Ident: input -| |-- RPAREN: ) -| `-- block -| |-- LBRACE: { -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | |-- lOrExp -| | | | `-- lAndExp -| | | | `-- eqExp -| | | | `-- relExp -| | | | |-- relExp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: temp -| | | | | |-- SUB: - -| | | | | `-- mulExp -| | | | | |-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: input -| | | | | |-- DIV: / -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: temp -| | | | |-- GT: > -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- FloatConst: 1e-6 -| | | |-- OR: || -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: temp -| | | | |-- SUB: - -| | | | `-- mulExp -| | | | |-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: input -| | | | |-- DIV: / -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: temp -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- unaryOp -| | | | `-- SUB: - -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- FloatConst: 1e-6 -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: temp -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | |-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | |-- LPAREN: ( -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | |-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: temp -| | | | | | |-- ADD: + -| | | | | | `-- mulExp -| | | | | | |-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: input -| | | | | | |-- DIV: / -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: temp -| | | | | `-- RPAREN: ) -| | | | |-- DIV: / -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 2 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- RETURN: return -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: temp -| | `-- SEMI: ; -| `-- RBRACE: } -|-- funcDef -| |-- funcType -| | `-- INT: int -| |-- Ident: main -| |-- LPAREN: ( -| |-- RPAREN: ) -| `-- block -| |-- LBRACE: { -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: n -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 100000 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- IF: if -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: n -| | | |-- LE: <= -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: n -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 2000 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: starttime -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- FLOAT: float -| | |-- varDef -| | | |-- Ident: vectorA -| | | |-- LBRACK: [ -| | | |-- constExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 100000 -| | | `-- RBRACK: ] -| | |-- COMMA: , -| | |-- varDef -| | | |-- Ident: vectorB -| | | |-- LBRACK: [ -| | | |-- constExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 100000 -| | | `-- RBRACK: ] -| | |-- COMMA: , -| | |-- varDef -| | | |-- Ident: Vectortmp -| | | |-- LBRACK: [ -| | | |-- constExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 100000 -| | | `-- RBRACK: ] -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | `-- Ident: i -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: n -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | |-- Ident: vectorA -| | | | |-- LBRACK: [ -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | `-- RBRACK: ] -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: i -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 1000 -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: mult_combin -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: vectorA -| | | | | |-- COMMA: , -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: vectorB -| | | | | |-- COMMA: , -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: n -| | | | | |-- COMMA: , -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: Vectortmp -| | | | `-- RPAREN: ) -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: mult_combin -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: vectorB -| | | | | |-- COMMA: , -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: vectorA -| | | | | |-- COMMA: , -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: n -| | | | | |-- COMMA: , -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: Vectortmp -| | | | `-- RPAREN: ) -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: stoptime -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- FLOAT: float -| | |-- varDef -| | | |-- Ident: result -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: my_sqrt -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | |-- mulExp -| | | | | `-- unaryExp -| | | | | |-- Ident: Vectordot -| | | | | |-- LPAREN: ( -| | | | | |-- funcRParams -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: vectorA -| | | | | | |-- COMMA: , -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: vectorB -| | | | | | |-- COMMA: , -| | | | | | `-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: n -| | | | | `-- RPAREN: ) -| | | | |-- DIV: / -| | | | `-- unaryExp -| | | | |-- Ident: Vectordot -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: vectorB -| | | | | |-- COMMA: , -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: vectorB -| | | | | |-- COMMA: , -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: n -| | | | `-- RPAREN: ) -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- IF: if -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | |-- lAndExp -| | | | `-- eqExp -| | | | `-- relExp -| | | | |-- relExp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: result -| | | | | |-- SUB: - -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- FloatConst: 1.000000 -| | | | |-- LE: <= -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- FloatConst: 1e-6 -| | | |-- AND: && -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: result -| | | | |-- SUB: - -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- FloatConst: 1.000000 -| | | |-- GE: >= -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- unaryOp -| | | | `-- SUB: - -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- FloatConst: 1e-6 -| | |-- RPAREN: ) -| | |-- stmt -| | | `-- block -| | | |-- LBRACE: { -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | |-- Ident: putint -| | | | | |-- LPAREN: ( -| | | | | |-- funcRParams -| | | | | | `-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- number -| | | | | | `-- IntConst: 1 -| | | | | `-- RPAREN: ) -| | | | `-- SEMI: ; -| | | `-- RBRACE: } -| | |-- ELSE: else -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: putint -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 0 -| | | | `-- RPAREN: ) -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: putch -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 10 -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- RETURN: return -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| `-- RBRACE: } -`-- EOF: diff --git a/output/lab1/vector_mul3.tree b/output/lab1/vector_mul3.tree index 80e165e..43148ff 100644 --- a/output/lab1/vector_mul3.tree +++ b/output/lab1/vector_mul3.tree @@ -1007,567 +1007,566 @@ compUnit | | | `-- Ident: temp | | `-- SEMI: ; | `-- RBRACE: } -|-- funcDef -| |-- funcType -| | `-- INT: int -| |-- Ident: main -| |-- LPAREN: ( -| |-- RPAREN: ) -| `-- block -| |-- LBRACE: { -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | |-- Ident: n -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 100000 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- IF: if -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: n -| | | |-- LE: <= -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: n -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 2000 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: starttime -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- FLOAT: float -| | |-- varDef -| | | |-- Ident: vectorA -| | | |-- LBRACK: [ -| | | |-- constExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 100000 -| | | `-- RBRACK: ] -| | |-- COMMA: , -| | |-- varDef -| | | |-- Ident: vectorB -| | | |-- LBRACK: [ -| | | |-- constExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 100000 -| | | `-- RBRACK: ] -| | |-- COMMA: , -| | |-- varDef -| | | |-- Ident: Vectortmp -| | | |-- LBRACK: [ -| | | |-- constExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 100000 -| | | `-- RBRACK: ] -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- INT: int -| | |-- varDef -| | | `-- Ident: i -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: n -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | |-- Ident: vectorA -| | | | |-- LBRACK: [ -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | `-- RBRACK: ] -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: i -| | |-- ASSIGN: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- WHILE: while -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: i -| | | |-- LT: < -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 1000 -| | |-- RPAREN: ) -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: mult_combin -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: vectorA -| | | | | |-- COMMA: , -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: vectorB -| | | | | |-- COMMA: , -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: n -| | | | | |-- COMMA: , -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: Vectortmp -| | | | `-- RPAREN: ) -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: mult_combin -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: vectorB -| | | | | |-- COMMA: , -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: vectorA -| | | | | |-- COMMA: , -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: n -| | | | | |-- COMMA: , -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: Vectortmp -| | | | `-- RPAREN: ) -| | | `-- SEMI: ; -| | |-- blockItem -| | | `-- stmt -| | | |-- lVal -| | | | `-- Ident: i -| | | |-- ASSIGN: = -| | | |-- exp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: i -| | | | |-- ADD: + -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 1 -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: stoptime -| | | |-- LPAREN: ( -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- FLOAT: float -| | |-- varDef -| | | |-- Ident: result -| | | |-- ASSIGN: = -| | | `-- initVal -| | | `-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: my_sqrt -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | |-- mulExp -| | | | | `-- unaryExp -| | | | | |-- Ident: Vectordot -| | | | | |-- LPAREN: ( -| | | | | |-- funcRParams -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: vectorA -| | | | | | |-- COMMA: , -| | | | | | |-- exp -| | | | | | | `-- addExp -| | | | | | | `-- mulExp -| | | | | | | `-- unaryExp -| | | | | | | `-- primaryExp -| | | | | | | `-- lVal -| | | | | | | `-- Ident: vectorB -| | | | | | |-- COMMA: , -| | | | | | `-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: n -| | | | | `-- RPAREN: ) -| | | | |-- DIV: / -| | | | `-- unaryExp -| | | | |-- Ident: Vectordot -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: vectorB -| | | | | |-- COMMA: , -| | | | | |-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: vectorB -| | | | | |-- COMMA: , -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: n -| | | | `-- RPAREN: ) -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- IF: if -| | |-- LPAREN: ( -| | |-- cond -| | | `-- lOrExp -| | | `-- lAndExp -| | | |-- lAndExp -| | | | `-- eqExp -| | | | `-- relExp -| | | | |-- relExp -| | | | | `-- addExp -| | | | | |-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- lVal -| | | | | | `-- Ident: result -| | | | | |-- SUB: - -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- FloatConst: 1.000000 -| | | | |-- LE: <= -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- FloatConst: 1e-6 -| | | |-- AND: && -| | | `-- eqExp -| | | `-- relExp -| | | |-- relExp -| | | | `-- addExp -| | | | |-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- lVal -| | | | | `-- Ident: result -| | | | |-- SUB: - -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- FloatConst: 1.000000 -| | | |-- GE: >= -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- unaryOp -| | | | `-- SUB: - -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- FloatConst: 1e-6 -| | |-- RPAREN: ) -| | |-- stmt -| | | `-- block -| | | |-- LBRACE: { -| | | |-- blockItem -| | | | `-- stmt -| | | | |-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | |-- Ident: putint -| | | | | |-- LPAREN: ( -| | | | | |-- funcRParams -| | | | | | `-- exp -| | | | | | `-- addExp -| | | | | | `-- mulExp -| | | | | | `-- unaryExp -| | | | | | `-- primaryExp -| | | | | | `-- number -| | | | | | `-- IntConst: 1 -| | | | | `-- RPAREN: ) -| | | | `-- SEMI: ; -| | | `-- RBRACE: } -| | |-- ELSE: else -| | `-- stmt -| | `-- block -| | |-- LBRACE: { -| | |-- blockItem -| | | `-- stmt -| | | |-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | |-- Ident: putint -| | | | |-- LPAREN: ( -| | | | |-- funcRParams -| | | | | `-- exp -| | | | | `-- addExp -| | | | | `-- mulExp -| | | | | `-- unaryExp -| | | | | `-- primaryExp -| | | | | `-- number -| | | | | `-- IntConst: 0 -| | | | `-- RPAREN: ) -| | | `-- SEMI: ; -| | `-- RBRACE: } -| |-- blockItem -| | `-- stmt -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: putch -| | | |-- LPAREN: ( -| | | |-- funcRParams -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- number -| | | | `-- IntConst: 10 -| | | `-- RPAREN: ) -| | `-- SEMI: ; -| |-- blockItem -| | `-- stmt -| | |-- RETURN: return -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- number -| | | `-- IntConst: 0 -| | `-- SEMI: ; -| `-- RBRACE: } -`-- EOF: +`-- funcDef + |-- funcType + | `-- INT: int + |-- Ident: main + |-- LPAREN: ( + |-- RPAREN: ) + `-- block + |-- LBRACE: { + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | |-- Ident: n + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 100000 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- IF: if + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: n + | | |-- LE: <= + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: n + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 2000 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: starttime + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- FLOAT: float + | |-- varDef + | | |-- Ident: vectorA + | | |-- LBRACK: [ + | | |-- constExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 100000 + | | `-- RBRACK: ] + | |-- COMMA: , + | |-- varDef + | | |-- Ident: vectorB + | | |-- LBRACK: [ + | | |-- constExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 100000 + | | `-- RBRACK: ] + | |-- COMMA: , + | |-- varDef + | | |-- Ident: Vectortmp + | | |-- LBRACK: [ + | | |-- constExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 100000 + | | `-- RBRACK: ] + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- INT: int + | |-- varDef + | | `-- Ident: i + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- lVal + | | `-- Ident: n + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | |-- Ident: vectorA + | | | |-- LBRACK: [ + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | `-- RBRACK: ] + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- lVal + | | `-- Ident: i + | |-- ASSIGN: = + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- WHILE: while + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- lVal + | | | `-- Ident: i + | | |-- LT: < + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 1000 + | |-- RPAREN: ) + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: mult_combin + | | | |-- LPAREN: ( + | | | |-- funcRParams + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: vectorA + | | | | |-- COMMA: , + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: vectorB + | | | | |-- COMMA: , + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: n + | | | | |-- COMMA: , + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: Vectortmp + | | | `-- RPAREN: ) + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: mult_combin + | | | |-- LPAREN: ( + | | | |-- funcRParams + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: vectorB + | | | | |-- COMMA: , + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: vectorA + | | | | |-- COMMA: , + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: n + | | | | |-- COMMA: , + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: Vectortmp + | | | `-- RPAREN: ) + | | `-- SEMI: ; + | |-- blockItem + | | `-- stmt + | | |-- lVal + | | | `-- Ident: i + | | |-- ASSIGN: = + | | |-- exp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: i + | | | |-- ADD: + + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 1 + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: stoptime + | | |-- LPAREN: ( + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- decl + | `-- varDecl + | |-- bType + | | `-- FLOAT: float + | |-- varDef + | | |-- Ident: result + | | |-- ASSIGN: = + | | `-- initVal + | | `-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: my_sqrt + | | |-- LPAREN: ( + | | |-- funcRParams + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | |-- mulExp + | | | | `-- unaryExp + | | | | |-- Ident: Vectordot + | | | | |-- LPAREN: ( + | | | | |-- funcRParams + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: vectorA + | | | | | |-- COMMA: , + | | | | | |-- exp + | | | | | | `-- addExp + | | | | | | `-- mulExp + | | | | | | `-- unaryExp + | | | | | | `-- primaryExp + | | | | | | `-- lVal + | | | | | | `-- Ident: vectorB + | | | | | |-- COMMA: , + | | | | | `-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: n + | | | | `-- RPAREN: ) + | | | |-- DIV: / + | | | `-- unaryExp + | | | |-- Ident: Vectordot + | | | |-- LPAREN: ( + | | | |-- funcRParams + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: vectorB + | | | | |-- COMMA: , + | | | | |-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: vectorB + | | | | |-- COMMA: , + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: n + | | | `-- RPAREN: ) + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- IF: if + | |-- LPAREN: ( + | |-- cond + | | `-- lOrExp + | | `-- lAndExp + | | |-- lAndExp + | | | `-- eqExp + | | | `-- relExp + | | | |-- relExp + | | | | `-- addExp + | | | | |-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- lVal + | | | | | `-- Ident: result + | | | | |-- SUB: - + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- FloatConst: 1.000000 + | | | |-- LE: <= + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- FloatConst: 1e-6 + | | |-- AND: && + | | `-- eqExp + | | `-- relExp + | | |-- relExp + | | | `-- addExp + | | | |-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- lVal + | | | | `-- Ident: result + | | | |-- SUB: - + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- FloatConst: 1.000000 + | | |-- GE: >= + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- unaryOp + | | | `-- SUB: - + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- FloatConst: 1e-6 + | |-- RPAREN: ) + | |-- stmt + | | `-- block + | | |-- LBRACE: { + | | |-- blockItem + | | | `-- stmt + | | | |-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | |-- Ident: putint + | | | | |-- LPAREN: ( + | | | | |-- funcRParams + | | | | | `-- exp + | | | | | `-- addExp + | | | | | `-- mulExp + | | | | | `-- unaryExp + | | | | | `-- primaryExp + | | | | | `-- number + | | | | | `-- IntConst: 1 + | | | | `-- RPAREN: ) + | | | `-- SEMI: ; + | | `-- RBRACE: } + | |-- ELSE: else + | `-- stmt + | `-- block + | |-- LBRACE: { + | |-- blockItem + | | `-- stmt + | | |-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | |-- Ident: putint + | | | |-- LPAREN: ( + | | | |-- funcRParams + | | | | `-- exp + | | | | `-- addExp + | | | | `-- mulExp + | | | | `-- unaryExp + | | | | `-- primaryExp + | | | | `-- number + | | | | `-- IntConst: 0 + | | | `-- RPAREN: ) + | | `-- SEMI: ; + | `-- RBRACE: } + |-- blockItem + | `-- stmt + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | |-- Ident: putch + | | |-- LPAREN: ( + | | |-- funcRParams + | | | `-- exp + | | | `-- addExp + | | | `-- mulExp + | | | `-- unaryExp + | | | `-- primaryExp + | | | `-- number + | | | `-- IntConst: 10 + | | `-- RPAREN: ) + | `-- SEMI: ; + |-- blockItem + | `-- stmt + | |-- RETURN: return + | |-- exp + | | `-- addExp + | | `-- mulExp + | | `-- unaryExp + | | `-- primaryExp + | | `-- number + | | `-- IntConst: 0 + | `-- SEMI: ; + `-- RBRACE: } diff --git a/scripts/lab2_build_test.sh b/scripts/lab2_build_test.sh new file mode 100644 index 0000000..2b1684e --- /dev/null +++ b/scripts/lab2_build_test.sh @@ -0,0 +1,201 @@ +#!/usr/bin/env bash +# Lab2 自动化构建 + IR 验证测评脚本 +# 用法: +# bash scripts/lab2_build_test.sh [--save-ir] [测试目录...] +# +# 选项: +# --save-ir 保存每个测试用例生成的 IR 到 output/lab2/ 目录 +# 默认只进行通过/失败统计,不保存 IR +# +# 退出码: +# 0 全部用例验证通过 +# 1 存在验证失败用例 + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" +COMPILER="$REPO_ROOT/build/bin/compiler" +ANTLR_JAR="$REPO_ROOT/third_party/antlr-4.13.2-complete.jar" +VERIFY_SCRIPT="$REPO_ROOT/scripts/verify_ir.sh" + +# 输出目录 +OUTPUT_DIR="$REPO_ROOT/output/lab2" +LOG_DIR="$REPO_ROOT/output/logs/lab2" + +# 颜色输出 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' + +# 默认不保存 IR +SAVE_IR=false + +# 解析命令行参数 +TEST_DIRS=() +while [[ $# -gt 0 ]]; do + case "$1" in + --save-ir) + SAVE_IR=true + shift + ;; + *) + TEST_DIRS+=("$1") + shift + ;; + esac +done + +# 如果没有指定测试目录,使用默认 +if [[ ${#TEST_DIRS[@]} -eq 0 ]]; then + TEST_DIRS=( + "$REPO_ROOT/test/test_case/functional" + "$REPO_ROOT/test/test_case/performance" + ) +fi + +# 检查必要文件是否存在 +if [ ! -f "$VERIFY_SCRIPT" ]; then + echo -e "${RED}错误: 验证脚本 $VERIFY_SCRIPT 不存在${NC}" + exit 1 +fi + +# 创建输出目录 +mkdir -p "$OUTPUT_DIR" "$LOG_DIR" + +# ─── Step 1:生成 ANTLR Lexer/Parser ──────────────────────────────────────────────── +echo "==> [1/3] 生成 ANTLR Lexer/Parser ..." +mkdir -p "$REPO_ROOT/build/generated/antlr4" +java -jar "$ANTLR_JAR" \ + -Dlanguage=Cpp \ + -visitor -no-listener \ + -Xexact-output-dir \ + -o "$REPO_ROOT/build/generated/antlr4" \ + "$REPO_ROOT/src/antlr4/SysY.g4" +echo " Lexer/Parser 生成完毕" + +# ─── Step 2:CMake 完整构建(不启用 PARSE_ONLY)──────────────────────────────────── +echo "==> [2/3] CMake 构建完整编译器..." +cmake -S "$REPO_ROOT" -B "$REPO_ROOT/build" \ + -DCMAKE_BUILD_TYPE=Release \ + > /dev/null + +cmake --build "$REPO_ROOT/build" -j "$(nproc)" 2>&1 | grep -E "error:|warning:|Built target|Linking" || true +echo " 构建完毕:$COMPILER" + +# ─── Step 3:批量验证 IR 生成与运行 ───────────────────────────────────────────────── +echo "==> [3/3] 批量验证 IR 生成与运行 ..." + +PASS=0 +FAIL=0 +FAIL_LIST=() + +# 定义测试单个文件的函数,便于统一错误处理 +test_one() { + local sy_file="$1" + local rel="$2" + local basename="$(basename "$sy_file" .sy)" + local safe_name="${rel//\//_}" # 将路径中的 '/' 替换为 '_' + local result_dir="$OUTPUT_DIR/$basename" + local log_file="$LOG_DIR/${safe_name}.log" + + # 创建结果目录 + mkdir -p "$result_dir" + + if $SAVE_IR; then + # 生成 IR 文件到指定目录 + local ir_file="$OUTPUT_DIR/${safe_name}.ir" + mkdir -p "$(dirname "$ir_file")" + # 尝试生成 IR + if ! "$COMPILER" --emit-ir "$sy_file" > "$ir_file" 2>&1; then + # 编译失败,记录日志 + { + echo "IR generation failed for $rel" + echo "Command: $COMPILER --emit-ir $sy_file" + echo "--- Output ---" + cat "$ir_file" + } > "$log_file" 2>&1 + return 1 + fi + + # 运行验证脚本(不再重复生成 IR,直接使用生成的 IR?但 verify_ir.sh 内部会重新编译,所以我们仍调用它验证运行) + # 这里我们希望验证脚本将中间文件放到 result_dir 中 + if ! "$VERIFY_SCRIPT" "$sy_file" "$result_dir" --run > /dev/null 2>&1; then + # 验证失败,记录日志 + { + echo "Verification failed for $rel" + echo "Command: $VERIFY_SCRIPT $sy_file $result_dir --run" + # 可能还需要捕获验证脚本的输出,但 verify_ir.sh 已经将错误打印到 stderr,我们无法直接捕获 + # 这里我们只能记录一些基本信息,并建议查看 result_dir 中的输出 + echo "Check result directory: $result_dir" + # 如果 result_dir 中有输出文件,可以尝试附加 + if [ -f "$result_dir/out" ]; then + echo "--- Program output ---" + cat "$result_dir/out" + fi + if [ -f "$result_dir/err" ]; then + echo "--- Program error ---" + cat "$result_dir/err" + fi + } > "$log_file" 2>&1 + return 1 + fi + else + # 不保存 IR,直接运行验证脚本 + if ! "$VERIFY_SCRIPT" "$sy_file" "$result_dir" --run > /dev/null 2>&1; then + { + echo "Verification failed for $rel" + echo "Command: $VERIFY_SCRIPT $sy_file $result_dir --run" + echo "Check result directory: $result_dir" + if [ -f "$result_dir/out" ]; then + echo "--- Program output ---" + cat "$result_dir/out" + fi + if [ -f "$result_dir/err" ]; then + echo "--- Program error ---" + cat "$result_dir/err" + fi + } > "$log_file" 2>&1 + return 1 + fi + fi + return 0 +} + +for TEST_DIR in "${TEST_DIRS[@]}"; do + if [[ ! -d "$TEST_DIR" ]]; then + echo -e " ${YELLOW}警告:目录不存在,跳过:$TEST_DIR${NC}" + continue + fi + + while IFS= read -r -d '' sy_file; do + rel="$(realpath --relative-to="$REPO_ROOT" "$sy_file")" + echo -n "测试 $rel ... " + + if test_one "$sy_file" "$rel"; then + echo -e "${GREEN}PASS${NC}" + ((PASS++)) || true + else + echo -e "${RED}FAIL${NC}" + FAIL_LIST+=("$rel") + ((FAIL++)) || true + fi + done < <(find "$TEST_DIR" -name "*.sy" -print0 | sort -z) +done + +# ─── 汇总 ───────────────────────────────────────────────────────────────────── +echo "" +echo "──────────────────────────────────────────" +echo -e " 测试结果:${GREEN}${PASS} PASS${NC} / ${RED}${FAIL} FAIL${NC} / 总计 $((PASS + FAIL))" +if [[ ${#FAIL_LIST[@]} -gt 0 ]]; then + echo "" + echo " 失败用例:" + for f in "${FAIL_LIST[@]}"; do + echo -e " ${RED}- $f${NC}" + echo " 日志文件: $LOG_DIR/${f//\//_}.log" + done +fi +echo "──────────────────────────────────────────" + +[[ $FAIL -eq 0 ]] \ No newline at end of file diff --git a/src/antlr4/.antlr/SysYParser.java b/src/antlr4/.antlr/SysYParser.java index fbba926..39395c5 100644 --- a/src/antlr4/.antlr/SysYParser.java +++ b/src/antlr4/.antlr/SysYParser.java @@ -22,17 +22,17 @@ public class SysYParser extends Parser { LBRACK=28, RBRACK=29, LBRACE=30, RBRACE=31, COMMA=32, SEMI=33, Ident=34, IntConst=35, FloatConst=36, WS=37, LINE_COMMENT=38, BLOCK_COMMENT=39; public static final int - RULE_compUnit = 0, RULE_decl = 1, RULE_constDecl = 2, RULE_bType = 3, - RULE_constDef = 4, RULE_constInitVal = 5, RULE_varDecl = 6, RULE_varDef = 7, - RULE_initVal = 8, RULE_funcDef = 9, RULE_funcType = 10, RULE_funcFParams = 11, - RULE_funcFParam = 12, RULE_block = 13, RULE_blockItem = 14, RULE_stmt = 15, - RULE_exp = 16, RULE_cond = 17, RULE_lVal = 18, RULE_primaryExp = 19, RULE_number = 20, - RULE_unaryExp = 21, RULE_unaryOp = 22, RULE_funcRParams = 23, RULE_mulExp = 24, - RULE_addExp = 25, RULE_relExp = 26, RULE_eqExp = 27, RULE_lAndExp = 28, - RULE_lOrExp = 29, RULE_constExp = 30; + RULE_module = 0, RULE_compUnit = 1, RULE_decl = 2, RULE_constDecl = 3, + RULE_bType = 4, RULE_constDef = 5, RULE_constInitVal = 6, RULE_varDecl = 7, + RULE_varDef = 8, RULE_initVal = 9, RULE_funcDef = 10, RULE_funcType = 11, + RULE_funcFParams = 12, RULE_funcFParam = 13, RULE_block = 14, RULE_blockItem = 15, + RULE_stmt = 16, RULE_exp = 17, RULE_cond = 18, RULE_lVal = 19, RULE_primaryExp = 20, + RULE_number = 21, RULE_unaryExp = 22, RULE_unaryOp = 23, RULE_funcRParams = 24, + RULE_mulExp = 25, RULE_addExp = 26, RULE_relExp = 27, RULE_eqExp = 28, + RULE_lAndExp = 29, RULE_lOrExp = 30, RULE_constExp = 31; private static String[] makeRuleNames() { return new String[] { - "compUnit", "decl", "constDecl", "bType", "constDef", "constInitVal", + "module", "compUnit", "decl", "constDecl", "bType", "constDef", "constInitVal", "varDecl", "varDef", "initVal", "funcDef", "funcType", "funcFParams", "funcFParam", "block", "blockItem", "stmt", "exp", "cond", "lVal", "primaryExp", "number", "unaryExp", "unaryOp", "funcRParams", "mulExp", "addExp", "relExp", @@ -111,8 +111,42 @@ public class SysYParser extends Parser { } @SuppressWarnings("CheckReturnValue") - public static class CompUnitContext extends ParserRuleContext { + public static class ModuleContext extends ParserRuleContext { + public CompUnitContext compUnit() { + return getRuleContext(CompUnitContext.class,0); + } public TerminalNode EOF() { return getToken(SysYParser.EOF, 0); } + public ModuleContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_module; } + } + + public final ModuleContext module() throws RecognitionException { + ModuleContext _localctx = new ModuleContext(_ctx, getState()); + enterRule(_localctx, 0, RULE_module); + try { + enterOuterAlt(_localctx, 1); + { + setState(64); + compUnit(); + setState(65); + match(EOF); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class CompUnitContext extends ParserRuleContext { public List decl() { return getRuleContexts(DeclContext.class); } @@ -129,51 +163,41 @@ public class SysYParser extends Parser { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_compUnit; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterCompUnit(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitCompUnit(this); - } } public final CompUnitContext compUnit() throws RecognitionException { CompUnitContext _localctx = new CompUnitContext(_ctx, getState()); - enterRule(_localctx, 0, RULE_compUnit); + enterRule(_localctx, 2, RULE_compUnit); int _la; try { enterOuterAlt(_localctx, 1); { - setState(64); + setState(69); _errHandler.sync(this); _la = _input.LA(1); do { { - setState(64); + setState(69); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,0,_ctx) ) { case 1: { - setState(62); + setState(67); decl(); } break; case 2: { - setState(63); + setState(68); funcDef(); } break; } } - setState(66); + setState(71); _errHandler.sync(this); _la = _input.LA(1); } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & 30L) != 0) ); - setState(68); - match(EOF); } } catch (RecognitionException re) { @@ -199,27 +223,19 @@ public class SysYParser extends Parser { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_decl; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterDecl(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitDecl(this); - } } public final DeclContext decl() throws RecognitionException { DeclContext _localctx = new DeclContext(_ctx, getState()); - enterRule(_localctx, 2, RULE_decl); + enterRule(_localctx, 4, RULE_decl); try { - setState(72); + setState(75); _errHandler.sync(this); switch (_input.LA(1)) { case CONST: enterOuterAlt(_localctx, 1); { - setState(70); + setState(73); constDecl(); } break; @@ -227,7 +243,7 @@ public class SysYParser extends Parser { case FLOAT: enterOuterAlt(_localctx, 2); { - setState(71); + setState(74); varDecl(); } break; @@ -267,46 +283,38 @@ public class SysYParser extends Parser { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_constDecl; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterConstDecl(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitConstDecl(this); - } } public final ConstDeclContext constDecl() throws RecognitionException { ConstDeclContext _localctx = new ConstDeclContext(_ctx, getState()); - enterRule(_localctx, 4, RULE_constDecl); + enterRule(_localctx, 6, RULE_constDecl); int _la; try { enterOuterAlt(_localctx, 1); { - setState(74); + setState(77); match(CONST); - setState(75); + setState(78); bType(); - setState(76); + setState(79); constDef(); - setState(81); + setState(84); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(77); + setState(80); match(COMMA); - setState(78); + setState(81); constDef(); } } - setState(83); + setState(86); _errHandler.sync(this); _la = _input.LA(1); } - setState(84); + setState(87); match(SEMI); } } @@ -329,24 +337,16 @@ public class SysYParser extends Parser { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_bType; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterBType(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitBType(this); - } } public final BTypeContext bType() throws RecognitionException { BTypeContext _localctx = new BTypeContext(_ctx, getState()); - enterRule(_localctx, 6, RULE_bType); + enterRule(_localctx, 8, RULE_bType); int _la; try { enterOuterAlt(_localctx, 1); { - setState(86); + setState(89); _la = _input.LA(1); if ( !(_la==INT || _la==FLOAT) ) { _errHandler.recoverInline(this); @@ -394,46 +394,38 @@ public class SysYParser extends Parser { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_constDef; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterConstDef(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitConstDef(this); - } } public final ConstDefContext constDef() throws RecognitionException { ConstDefContext _localctx = new ConstDefContext(_ctx, getState()); - enterRule(_localctx, 8, RULE_constDef); + enterRule(_localctx, 10, RULE_constDef); int _la; try { enterOuterAlt(_localctx, 1); { - setState(88); + setState(91); match(Ident); - setState(95); + setState(98); _errHandler.sync(this); _la = _input.LA(1); while (_la==LBRACK) { { { - setState(89); + setState(92); match(LBRACK); - setState(90); + setState(93); constExp(); - setState(91); + setState(94); match(RBRACK); } } - setState(97); + setState(100); _errHandler.sync(this); _la = _input.LA(1); } - setState(98); + setState(101); match(ASSIGN); - setState(99); + setState(102); constInitVal(); } } @@ -469,22 +461,14 @@ public class SysYParser extends Parser { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_constInitVal; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterConstInitVal(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitConstInitVal(this); - } } public final ConstInitValContext constInitVal() throws RecognitionException { ConstInitValContext _localctx = new ConstInitValContext(_ctx, getState()); - enterRule(_localctx, 10, RULE_constInitVal); + enterRule(_localctx, 12, RULE_constInitVal); int _la; try { - setState(114); + setState(117); _errHandler.sync(this); switch (_input.LA(1)) { case ADD: @@ -496,42 +480,42 @@ public class SysYParser extends Parser { case FloatConst: enterOuterAlt(_localctx, 1); { - setState(101); + setState(104); constExp(); } break; case LBRACE: enterOuterAlt(_localctx, 2); { - setState(102); + setState(105); match(LBRACE); - setState(111); + setState(114); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 121408329728L) != 0)) { { - setState(103); + setState(106); constInitVal(); - setState(108); + setState(111); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(104); + setState(107); match(COMMA); - setState(105); + setState(108); constInitVal(); } } - setState(110); + setState(113); _errHandler.sync(this); _la = _input.LA(1); } } } - setState(113); + setState(116); match(RBRACE); } break; @@ -570,44 +554,36 @@ public class SysYParser extends Parser { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_varDecl; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterVarDecl(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitVarDecl(this); - } } public final VarDeclContext varDecl() throws RecognitionException { VarDeclContext _localctx = new VarDeclContext(_ctx, getState()); - enterRule(_localctx, 12, RULE_varDecl); + enterRule(_localctx, 14, RULE_varDecl); int _la; try { enterOuterAlt(_localctx, 1); { - setState(116); + setState(119); bType(); - setState(117); + setState(120); varDef(); - setState(122); + setState(125); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(118); + setState(121); match(COMMA); - setState(119); + setState(122); varDef(); } } - setState(124); + setState(127); _errHandler.sync(this); _la = _input.LA(1); } - setState(125); + setState(128); match(SEMI); } } @@ -647,44 +623,36 @@ public class SysYParser extends Parser { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_varDef; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterVarDef(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitVarDef(this); - } } public final VarDefContext varDef() throws RecognitionException { VarDefContext _localctx = new VarDefContext(_ctx, getState()); - enterRule(_localctx, 14, RULE_varDef); + enterRule(_localctx, 16, RULE_varDef); int _la; try { - setState(149); + setState(152); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,11,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(127); + setState(130); match(Ident); - setState(134); + setState(137); _errHandler.sync(this); _la = _input.LA(1); while (_la==LBRACK) { { { - setState(128); + setState(131); match(LBRACK); - setState(129); + setState(132); constExp(); - setState(130); + setState(133); match(RBRACK); } } - setState(136); + setState(139); _errHandler.sync(this); _la = _input.LA(1); } @@ -693,29 +661,29 @@ public class SysYParser extends Parser { case 2: enterOuterAlt(_localctx, 2); { - setState(137); + setState(140); match(Ident); - setState(144); + setState(147); _errHandler.sync(this); _la = _input.LA(1); while (_la==LBRACK) { { { - setState(138); + setState(141); match(LBRACK); - setState(139); + setState(142); constExp(); - setState(140); + setState(143); match(RBRACK); } } - setState(146); + setState(149); _errHandler.sync(this); _la = _input.LA(1); } - setState(147); + setState(150); match(ASSIGN); - setState(148); + setState(151); initVal(); } break; @@ -753,22 +721,14 @@ public class SysYParser extends Parser { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_initVal; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterInitVal(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitInitVal(this); - } } public final InitValContext initVal() throws RecognitionException { InitValContext _localctx = new InitValContext(_ctx, getState()); - enterRule(_localctx, 16, RULE_initVal); + enterRule(_localctx, 18, RULE_initVal); int _la; try { - setState(164); + setState(167); _errHandler.sync(this); switch (_input.LA(1)) { case ADD: @@ -780,42 +740,42 @@ public class SysYParser extends Parser { case FloatConst: enterOuterAlt(_localctx, 1); { - setState(151); + setState(154); exp(); } break; case LBRACE: enterOuterAlt(_localctx, 2); { - setState(152); + setState(155); match(LBRACE); - setState(161); + setState(164); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 121408329728L) != 0)) { { - setState(153); + setState(156); initVal(); - setState(158); + setState(161); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(154); + setState(157); match(COMMA); - setState(155); + setState(158); initVal(); } } - setState(160); + setState(163); _errHandler.sync(this); _la = _input.LA(1); } } } - setState(163); + setState(166); match(RBRACE); } break; @@ -852,42 +812,34 @@ public class SysYParser extends Parser { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_funcDef; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterFuncDef(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitFuncDef(this); - } } public final FuncDefContext funcDef() throws RecognitionException { FuncDefContext _localctx = new FuncDefContext(_ctx, getState()); - enterRule(_localctx, 18, RULE_funcDef); + enterRule(_localctx, 20, RULE_funcDef); int _la; try { enterOuterAlt(_localctx, 1); { - setState(166); + setState(169); funcType(); - setState(167); + setState(170); match(Ident); - setState(168); + setState(171); match(LPAREN); - setState(170); + setState(173); _errHandler.sync(this); _la = _input.LA(1); if (_la==INT || _la==FLOAT) { { - setState(169); + setState(172); funcFParams(); } } - setState(172); + setState(175); match(RPAREN); - setState(173); + setState(176); block(); } } @@ -911,24 +863,16 @@ public class SysYParser extends Parser { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_funcType; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterFuncType(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitFuncType(this); - } } public final FuncTypeContext funcType() throws RecognitionException { FuncTypeContext _localctx = new FuncTypeContext(_ctx, getState()); - enterRule(_localctx, 20, RULE_funcType); + enterRule(_localctx, 22, RULE_funcType); int _la; try { enterOuterAlt(_localctx, 1); { - setState(175); + setState(178); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 28L) != 0)) ) { _errHandler.recoverInline(this); @@ -967,38 +911,30 @@ public class SysYParser extends Parser { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_funcFParams; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterFuncFParams(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitFuncFParams(this); - } } public final FuncFParamsContext funcFParams() throws RecognitionException { FuncFParamsContext _localctx = new FuncFParamsContext(_ctx, getState()); - enterRule(_localctx, 22, RULE_funcFParams); + enterRule(_localctx, 24, RULE_funcFParams); int _la; try { enterOuterAlt(_localctx, 1); { - setState(177); + setState(180); funcFParam(); - setState(182); + setState(185); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(178); + setState(181); match(COMMA); - setState(179); + setState(182); funcFParam(); } } - setState(184); + setState(187); _errHandler.sync(this); _la = _input.LA(1); } @@ -1039,59 +975,51 @@ public class SysYParser extends Parser { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_funcFParam; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterFuncFParam(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitFuncFParam(this); - } } public final FuncFParamContext funcFParam() throws RecognitionException { FuncFParamContext _localctx = new FuncFParamContext(_ctx, getState()); - enterRule(_localctx, 24, RULE_funcFParam); + enterRule(_localctx, 26, RULE_funcFParam); int _la; try { - setState(201); + setState(204); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,18,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(185); + setState(188); bType(); - setState(186); + setState(189); match(Ident); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(188); + setState(191); bType(); - setState(189); + setState(192); match(Ident); - setState(190); + setState(193); match(LBRACK); - setState(191); + setState(194); match(RBRACK); - setState(198); + setState(201); _errHandler.sync(this); _la = _input.LA(1); while (_la==LBRACK) { { { - setState(192); + setState(195); match(LBRACK); - setState(193); + setState(196); exp(); - setState(194); + setState(197); match(RBRACK); } } - setState(200); + setState(203); _errHandler.sync(this); _la = _input.LA(1); } @@ -1124,40 +1052,32 @@ public class SysYParser extends Parser { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_block; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterBlock(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitBlock(this); - } } public final BlockContext block() throws RecognitionException { BlockContext _localctx = new BlockContext(_ctx, getState()); - enterRule(_localctx, 26, RULE_block); + enterRule(_localctx, 28, RULE_block); int _la; try { enterOuterAlt(_localctx, 1); { - setState(203); + setState(206); match(LBRACE); - setState(207); + setState(210); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 129998266286L) != 0)) { { { - setState(204); + setState(207); blockItem(); } } - setState(209); + setState(212); _errHandler.sync(this); _la = _input.LA(1); } - setState(210); + setState(213); match(RBRACE); } } @@ -1184,21 +1104,13 @@ public class SysYParser extends Parser { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_blockItem; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterBlockItem(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitBlockItem(this); - } } public final BlockItemContext blockItem() throws RecognitionException { BlockItemContext _localctx = new BlockItemContext(_ctx, getState()); - enterRule(_localctx, 28, RULE_blockItem); + enterRule(_localctx, 30, RULE_blockItem); try { - setState(214); + setState(217); _errHandler.sync(this); switch (_input.LA(1)) { case CONST: @@ -1206,7 +1118,7 @@ public class SysYParser extends Parser { case FLOAT: enterOuterAlt(_localctx, 1); { - setState(212); + setState(215); decl(); } break; @@ -1226,7 +1138,7 @@ public class SysYParser extends Parser { case FloatConst: enterOuterAlt(_localctx, 2); { - setState(213); + setState(216); stmt(); } break; @@ -1247,39 +1159,17 @@ public class SysYParser extends Parser { @SuppressWarnings("CheckReturnValue") public static class StmtContext extends ParserRuleContext { - public StmtContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_stmt; } - - public StmtContext() { } - public void copyFrom(StmtContext ctx) { - super.copyFrom(ctx); - } - } - @SuppressWarnings("CheckReturnValue") - public static class WhileStmtContext extends StmtContext { - public TerminalNode WHILE() { return getToken(SysYParser.WHILE, 0); } - public TerminalNode LPAREN() { return getToken(SysYParser.LPAREN, 0); } - public CondContext cond() { - return getRuleContext(CondContext.class,0); - } - public TerminalNode RPAREN() { return getToken(SysYParser.RPAREN, 0); } - public StmtContext stmt() { - return getRuleContext(StmtContext.class,0); + public LValContext lVal() { + return getRuleContext(LValContext.class,0); } - public WhileStmtContext(StmtContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterWhileStmt(this); + public TerminalNode ASSIGN() { return getToken(SysYParser.ASSIGN, 0); } + public ExpContext exp() { + return getRuleContext(ExpContext.class,0); } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitWhileStmt(this); + public TerminalNode SEMI() { return getToken(SysYParser.SEMI, 0); } + public BlockContext block() { + return getRuleContext(BlockContext.class,0); } - } - @SuppressWarnings("CheckReturnValue") - public static class IfStmtContext extends StmtContext { public TerminalNode IF() { return getToken(SysYParser.IF, 0); } public TerminalNode LPAREN() { return getToken(SysYParser.LPAREN, 0); } public CondContext cond() { @@ -1293,183 +1183,82 @@ public class SysYParser extends Parser { return getRuleContext(StmtContext.class,i); } public TerminalNode ELSE() { return getToken(SysYParser.ELSE, 0); } - public IfStmtContext(StmtContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterIfStmt(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitIfStmt(this); - } - } - @SuppressWarnings("CheckReturnValue") - public static class BlockStmtContext extends StmtContext { - public BlockContext block() { - return getRuleContext(BlockContext.class,0); - } - public BlockStmtContext(StmtContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterBlockStmt(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitBlockStmt(this); - } - } - @SuppressWarnings("CheckReturnValue") - public static class AssignStmtContext extends StmtContext { - public LValContext lVal() { - return getRuleContext(LValContext.class,0); - } - public TerminalNode ASSIGN() { return getToken(SysYParser.ASSIGN, 0); } - public ExpContext exp() { - return getRuleContext(ExpContext.class,0); - } - public TerminalNode SEMI() { return getToken(SysYParser.SEMI, 0); } - public AssignStmtContext(StmtContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterAssignStmt(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitAssignStmt(this); - } - } - @SuppressWarnings("CheckReturnValue") - public static class BreakStmtContext extends StmtContext { + public TerminalNode WHILE() { return getToken(SysYParser.WHILE, 0); } public TerminalNode BREAK() { return getToken(SysYParser.BREAK, 0); } - public TerminalNode SEMI() { return getToken(SysYParser.SEMI, 0); } - public BreakStmtContext(StmtContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterBreakStmt(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitBreakStmt(this); - } - } - @SuppressWarnings("CheckReturnValue") - public static class ExpStmtContext extends StmtContext { - public TerminalNode SEMI() { return getToken(SysYParser.SEMI, 0); } - public ExpContext exp() { - return getRuleContext(ExpContext.class,0); - } - public ExpStmtContext(StmtContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterExpStmt(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitExpStmt(this); - } - } - @SuppressWarnings("CheckReturnValue") - public static class ReturnStmtContext extends StmtContext { - public TerminalNode RETURN() { return getToken(SysYParser.RETURN, 0); } - public TerminalNode SEMI() { return getToken(SysYParser.SEMI, 0); } - public ExpContext exp() { - return getRuleContext(ExpContext.class,0); - } - public ReturnStmtContext(StmtContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterReturnStmt(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitReturnStmt(this); - } - } - @SuppressWarnings("CheckReturnValue") - public static class ContinueStmtContext extends StmtContext { public TerminalNode CONTINUE() { return getToken(SysYParser.CONTINUE, 0); } - public TerminalNode SEMI() { return getToken(SysYParser.SEMI, 0); } - public ContinueStmtContext(StmtContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterContinueStmt(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitContinueStmt(this); + public TerminalNode RETURN() { return getToken(SysYParser.RETURN, 0); } + public StmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); } + @Override public int getRuleIndex() { return RULE_stmt; } } public final StmtContext stmt() throws RecognitionException { StmtContext _localctx = new StmtContext(_ctx, getState()); - enterRule(_localctx, 30, RULE_stmt); + enterRule(_localctx, 32, RULE_stmt); int _la; try { - setState(250); + setState(253); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,24,_ctx) ) { case 1: - _localctx = new AssignStmtContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(216); + setState(219); lVal(); - setState(217); + setState(220); match(ASSIGN); - setState(218); + setState(221); exp(); - setState(219); + setState(222); match(SEMI); } break; case 2: - _localctx = new ExpStmtContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(222); + setState(225); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 120334587904L) != 0)) { { - setState(221); + setState(224); exp(); } } - setState(224); + setState(227); match(SEMI); } break; case 3: - _localctx = new BlockStmtContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(225); + setState(228); block(); } break; case 4: - _localctx = new IfStmtContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(226); + setState(229); match(IF); - setState(227); + setState(230); match(LPAREN); - setState(228); + setState(231); cond(); - setState(229); + setState(232); match(RPAREN); - setState(230); - stmt(); setState(233); + stmt(); + setState(236); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,22,_ctx) ) { case 1: { - setState(231); + setState(234); match(ELSE); - setState(232); + setState(235); stmt(); } break; @@ -1477,58 +1266,54 @@ public class SysYParser extends Parser { } break; case 5: - _localctx = new WhileStmtContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(235); + setState(238); match(WHILE); - setState(236); + setState(239); match(LPAREN); - setState(237); + setState(240); cond(); - setState(238); + setState(241); match(RPAREN); - setState(239); + setState(242); stmt(); } break; case 6: - _localctx = new BreakStmtContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(241); + setState(244); match(BREAK); - setState(242); + setState(245); match(SEMI); } break; case 7: - _localctx = new ContinueStmtContext(_localctx); enterOuterAlt(_localctx, 7); { - setState(243); + setState(246); match(CONTINUE); - setState(244); + setState(247); match(SEMI); } break; case 8: - _localctx = new ReturnStmtContext(_localctx); enterOuterAlt(_localctx, 8); { - setState(245); + setState(248); match(RETURN); - setState(247); + setState(250); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 120334587904L) != 0)) { { - setState(246); + setState(249); exp(); } } - setState(249); + setState(252); match(SEMI); } break; @@ -1554,23 +1339,15 @@ public class SysYParser extends Parser { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_exp; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterExp(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitExp(this); - } } public final ExpContext exp() throws RecognitionException { ExpContext _localctx = new ExpContext(_ctx, getState()); - enterRule(_localctx, 32, RULE_exp); + enterRule(_localctx, 34, RULE_exp); try { enterOuterAlt(_localctx, 1); { - setState(252); + setState(255); addExp(0); } } @@ -1594,23 +1371,15 @@ public class SysYParser extends Parser { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_cond; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterCond(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitCond(this); - } } public final CondContext cond() throws RecognitionException { CondContext _localctx = new CondContext(_ctx, getState()); - enterRule(_localctx, 34, RULE_cond); + enterRule(_localctx, 36, RULE_cond); try { enterOuterAlt(_localctx, 1); { - setState(254); + setState(257); lOrExp(0); } } @@ -1646,42 +1415,34 @@ public class SysYParser extends Parser { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_lVal; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterLVal(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitLVal(this); - } } public final LValContext lVal() throws RecognitionException { LValContext _localctx = new LValContext(_ctx, getState()); - enterRule(_localctx, 36, RULE_lVal); + enterRule(_localctx, 38, RULE_lVal); try { int _alt; enterOuterAlt(_localctx, 1); { - setState(256); + setState(259); match(Ident); - setState(263); + setState(266); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,25,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(257); + setState(260); match(LBRACK); - setState(258); + setState(261); exp(); - setState(259); + setState(262); match(RBRACK); } } } - setState(265); + setState(268); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,25,_ctx); } @@ -1715,38 +1476,30 @@ public class SysYParser extends Parser { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_primaryExp; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterPrimaryExp(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitPrimaryExp(this); - } } public final PrimaryExpContext primaryExp() throws RecognitionException { PrimaryExpContext _localctx = new PrimaryExpContext(_ctx, getState()); - enterRule(_localctx, 38, RULE_primaryExp); + enterRule(_localctx, 40, RULE_primaryExp); try { - setState(272); + setState(275); _errHandler.sync(this); switch (_input.LA(1)) { case LPAREN: enterOuterAlt(_localctx, 1); { - setState(266); + setState(269); match(LPAREN); - setState(267); + setState(270); exp(); - setState(268); + setState(271); match(RPAREN); } break; case Ident: enterOuterAlt(_localctx, 2); { - setState(270); + setState(273); lVal(); } break; @@ -1754,7 +1507,7 @@ public class SysYParser extends Parser { case FloatConst: enterOuterAlt(_localctx, 3); { - setState(271); + setState(274); number(); } break; @@ -1781,24 +1534,16 @@ public class SysYParser extends Parser { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_number; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterNumber(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitNumber(this); - } } public final NumberContext number() throws RecognitionException { NumberContext _localctx = new NumberContext(_ctx, getState()); - enterRule(_localctx, 40, RULE_number); + enterRule(_localctx, 42, RULE_number); int _la; try { enterOuterAlt(_localctx, 1); { - setState(274); + setState(277); _la = _input.LA(1); if ( !(_la==IntConst || _la==FloatConst) ) { _errHandler.recoverInline(this); @@ -1823,113 +1568,69 @@ public class SysYParser extends Parser { @SuppressWarnings("CheckReturnValue") public static class UnaryExpContext extends ParserRuleContext { - public UnaryExpContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_unaryExp; } - - public UnaryExpContext() { } - public void copyFrom(UnaryExpContext ctx) { - super.copyFrom(ctx); - } - } - @SuppressWarnings("CheckReturnValue") - public static class OpUnaryExpContext extends UnaryExpContext { - public UnaryOpContext unaryOp() { - return getRuleContext(UnaryOpContext.class,0); - } - public UnaryExpContext unaryExp() { - return getRuleContext(UnaryExpContext.class,0); - } - public OpUnaryExpContext(UnaryExpContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterOpUnaryExp(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitOpUnaryExp(this); + public PrimaryExpContext primaryExp() { + return getRuleContext(PrimaryExpContext.class,0); } - } - @SuppressWarnings("CheckReturnValue") - public static class CallUnaryExpContext extends UnaryExpContext { public TerminalNode Ident() { return getToken(SysYParser.Ident, 0); } public TerminalNode LPAREN() { return getToken(SysYParser.LPAREN, 0); } public TerminalNode RPAREN() { return getToken(SysYParser.RPAREN, 0); } public FuncRParamsContext funcRParams() { return getRuleContext(FuncRParamsContext.class,0); } - public CallUnaryExpContext(UnaryExpContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterCallUnaryExp(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitCallUnaryExp(this); - } - } - @SuppressWarnings("CheckReturnValue") - public static class PrimaryUnaryExpContext extends UnaryExpContext { - public PrimaryExpContext primaryExp() { - return getRuleContext(PrimaryExpContext.class,0); + public UnaryOpContext unaryOp() { + return getRuleContext(UnaryOpContext.class,0); } - public PrimaryUnaryExpContext(UnaryExpContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterPrimaryUnaryExp(this); + public UnaryExpContext unaryExp() { + return getRuleContext(UnaryExpContext.class,0); } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitPrimaryUnaryExp(this); + public UnaryExpContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); } + @Override public int getRuleIndex() { return RULE_unaryExp; } } public final UnaryExpContext unaryExp() throws RecognitionException { UnaryExpContext _localctx = new UnaryExpContext(_ctx, getState()); - enterRule(_localctx, 42, RULE_unaryExp); + enterRule(_localctx, 44, RULE_unaryExp); int _la; try { - setState(286); + setState(289); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,28,_ctx) ) { case 1: - _localctx = new PrimaryUnaryExpContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(276); + setState(279); primaryExp(); } break; case 2: - _localctx = new CallUnaryExpContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(277); + setState(280); match(Ident); - setState(278); + setState(281); match(LPAREN); - setState(280); + setState(283); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 120334587904L) != 0)) { { - setState(279); + setState(282); funcRParams(); } } - setState(282); + setState(285); match(RPAREN); } break; case 3: - _localctx = new OpUnaryExpContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(283); + setState(286); unaryOp(); - setState(284); + setState(287); unaryExp(); } break; @@ -1955,24 +1656,16 @@ public class SysYParser extends Parser { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_unaryOp; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterUnaryOp(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitUnaryOp(this); - } } public final UnaryOpContext unaryOp() throws RecognitionException { UnaryOpContext _localctx = new UnaryOpContext(_ctx, getState()); - enterRule(_localctx, 44, RULE_unaryOp); + enterRule(_localctx, 46, RULE_unaryOp); int _la; try { enterOuterAlt(_localctx, 1); { - setState(288); + setState(291); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 8394752L) != 0)) ) { _errHandler.recoverInline(this); @@ -2011,38 +1704,30 @@ public class SysYParser extends Parser { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_funcRParams; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterFuncRParams(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitFuncRParams(this); - } } public final FuncRParamsContext funcRParams() throws RecognitionException { FuncRParamsContext _localctx = new FuncRParamsContext(_ctx, getState()); - enterRule(_localctx, 46, RULE_funcRParams); + enterRule(_localctx, 48, RULE_funcRParams); int _la; try { enterOuterAlt(_localctx, 1); { - setState(290); + setState(293); exp(); - setState(295); + setState(298); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(291); + setState(294); match(COMMA); - setState(292); + setState(295); exp(); } } - setState(297); + setState(300); _errHandler.sync(this); _la = _input.LA(1); } @@ -2061,52 +1746,20 @@ public class SysYParser extends Parser { @SuppressWarnings("CheckReturnValue") public static class MulExpContext extends ParserRuleContext { - public MulExpContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_mulExp; } - - public MulExpContext() { } - public void copyFrom(MulExpContext ctx) { - super.copyFrom(ctx); - } - } - @SuppressWarnings("CheckReturnValue") - public static class BinaryMulExpContext extends MulExpContext { public Token op; - public MulExpContext mulExp() { - return getRuleContext(MulExpContext.class,0); - } public UnaryExpContext unaryExp() { return getRuleContext(UnaryExpContext.class,0); } + public MulExpContext mulExp() { + return getRuleContext(MulExpContext.class,0); + } public TerminalNode MUL() { return getToken(SysYParser.MUL, 0); } public TerminalNode DIV() { return getToken(SysYParser.DIV, 0); } public TerminalNode MOD() { return getToken(SysYParser.MOD, 0); } - public BinaryMulExpContext(MulExpContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterBinaryMulExp(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitBinaryMulExp(this); - } - } - @SuppressWarnings("CheckReturnValue") - public static class UnaryMulExpContext extends MulExpContext { - public UnaryExpContext unaryExp() { - return getRuleContext(UnaryExpContext.class,0); - } - public UnaryMulExpContext(MulExpContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterUnaryMulExp(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitUnaryMulExp(this); + public MulExpContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); } + @Override public int getRuleIndex() { return RULE_mulExp; } } public final MulExpContext mulExp() throws RecognitionException { @@ -2118,23 +1771,19 @@ public class SysYParser extends Parser { int _parentState = getState(); MulExpContext _localctx = new MulExpContext(_ctx, _parentState); MulExpContext _prevctx = _localctx; - int _startState = 48; - enterRecursionRule(_localctx, 48, RULE_mulExp, _p); + int _startState = 50; + enterRecursionRule(_localctx, 50, RULE_mulExp, _p); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { { - _localctx = new UnaryMulExpContext(_localctx); - _ctx = _localctx; - _prevctx = _localctx; - - setState(299); + setState(302); unaryExp(); } _ctx.stop = _input.LT(-1); - setState(306); + setState(309); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,30,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -2143,27 +1792,27 @@ public class SysYParser extends Parser { _prevctx = _localctx; { { - _localctx = new BinaryMulExpContext(new MulExpContext(_parentctx, _parentState)); + _localctx = new MulExpContext(_parentctx, _parentState); pushNewRecursionContext(_localctx, _startState, RULE_mulExp); - setState(301); + setState(304); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(302); - ((BinaryMulExpContext)_localctx).op = _input.LT(1); + setState(305); + ((MulExpContext)_localctx).op = _input.LT(1); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 57344L) != 0)) ) { - ((BinaryMulExpContext)_localctx).op = (Token)_errHandler.recoverInline(this); + ((MulExpContext)_localctx).op = (Token)_errHandler.recoverInline(this); } else { if ( _input.LA(1)==Token.EOF ) matchedEOF = true; _errHandler.reportMatch(this); consume(); } - setState(303); + setState(306); unaryExp(); } } } - setState(308); + setState(311); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,30,_ctx); } @@ -2182,51 +1831,19 @@ public class SysYParser extends Parser { @SuppressWarnings("CheckReturnValue") public static class AddExpContext extends ParserRuleContext { - public AddExpContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_addExp; } - - public AddExpContext() { } - public void copyFrom(AddExpContext ctx) { - super.copyFrom(ctx); - } - } - @SuppressWarnings("CheckReturnValue") - public static class BinaryAddExpContext extends AddExpContext { public Token op; - public AddExpContext addExp() { - return getRuleContext(AddExpContext.class,0); - } public MulExpContext mulExp() { return getRuleContext(MulExpContext.class,0); } + public AddExpContext addExp() { + return getRuleContext(AddExpContext.class,0); + } public TerminalNode ADD() { return getToken(SysYParser.ADD, 0); } public TerminalNode SUB() { return getToken(SysYParser.SUB, 0); } - public BinaryAddExpContext(AddExpContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterBinaryAddExp(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitBinaryAddExp(this); - } - } - @SuppressWarnings("CheckReturnValue") - public static class MulAddExpContext extends AddExpContext { - public MulExpContext mulExp() { - return getRuleContext(MulExpContext.class,0); - } - public MulAddExpContext(AddExpContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterMulAddExp(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitMulAddExp(this); + public AddExpContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); } + @Override public int getRuleIndex() { return RULE_addExp; } } public final AddExpContext addExp() throws RecognitionException { @@ -2238,23 +1855,19 @@ public class SysYParser extends Parser { int _parentState = getState(); AddExpContext _localctx = new AddExpContext(_ctx, _parentState); AddExpContext _prevctx = _localctx; - int _startState = 50; - enterRecursionRule(_localctx, 50, RULE_addExp, _p); + int _startState = 52; + enterRecursionRule(_localctx, 52, RULE_addExp, _p); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { { - _localctx = new MulAddExpContext(_localctx); - _ctx = _localctx; - _prevctx = _localctx; - - setState(310); + setState(313); mulExp(0); } _ctx.stop = _input.LT(-1); - setState(317); + setState(320); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,31,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -2263,27 +1876,27 @@ public class SysYParser extends Parser { _prevctx = _localctx; { { - _localctx = new BinaryAddExpContext(new AddExpContext(_parentctx, _parentState)); + _localctx = new AddExpContext(_parentctx, _parentState); pushNewRecursionContext(_localctx, _startState, RULE_addExp); - setState(312); + setState(315); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(313); - ((BinaryAddExpContext)_localctx).op = _input.LT(1); + setState(316); + ((AddExpContext)_localctx).op = _input.LT(1); _la = _input.LA(1); if ( !(_la==ADD || _la==SUB) ) { - ((BinaryAddExpContext)_localctx).op = (Token)_errHandler.recoverInline(this); + ((AddExpContext)_localctx).op = (Token)_errHandler.recoverInline(this); } else { if ( _input.LA(1)==Token.EOF ) matchedEOF = true; _errHandler.reportMatch(this); consume(); } - setState(314); + setState(317); mulExp(0); } } } - setState(319); + setState(322); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,31,_ctx); } @@ -2302,53 +1915,21 @@ public class SysYParser extends Parser { @SuppressWarnings("CheckReturnValue") public static class RelExpContext extends ParserRuleContext { - public RelExpContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_relExp; } - - public RelExpContext() { } - public void copyFrom(RelExpContext ctx) { - super.copyFrom(ctx); - } - } - @SuppressWarnings("CheckReturnValue") - public static class AddRelExpContext extends RelExpContext { + public Token op; public AddExpContext addExp() { return getRuleContext(AddExpContext.class,0); } - public AddRelExpContext(RelExpContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterAddRelExp(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitAddRelExp(this); - } - } - @SuppressWarnings("CheckReturnValue") - public static class BinaryRelExpContext extends RelExpContext { - public Token op; public RelExpContext relExp() { return getRuleContext(RelExpContext.class,0); } - public AddExpContext addExp() { - return getRuleContext(AddExpContext.class,0); - } public TerminalNode LT() { return getToken(SysYParser.LT, 0); } public TerminalNode GT() { return getToken(SysYParser.GT, 0); } public TerminalNode LE() { return getToken(SysYParser.LE, 0); } public TerminalNode GE() { return getToken(SysYParser.GE, 0); } - public BinaryRelExpContext(RelExpContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterBinaryRelExp(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitBinaryRelExp(this); + public RelExpContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); } + @Override public int getRuleIndex() { return RULE_relExp; } } public final RelExpContext relExp() throws RecognitionException { @@ -2360,23 +1941,19 @@ public class SysYParser extends Parser { int _parentState = getState(); RelExpContext _localctx = new RelExpContext(_ctx, _parentState); RelExpContext _prevctx = _localctx; - int _startState = 52; - enterRecursionRule(_localctx, 52, RULE_relExp, _p); + int _startState = 54; + enterRecursionRule(_localctx, 54, RULE_relExp, _p); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { { - _localctx = new AddRelExpContext(_localctx); - _ctx = _localctx; - _prevctx = _localctx; - - setState(321); + setState(324); addExp(0); } _ctx.stop = _input.LT(-1); - setState(328); + setState(331); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,32,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -2385,27 +1962,27 @@ public class SysYParser extends Parser { _prevctx = _localctx; { { - _localctx = new BinaryRelExpContext(new RelExpContext(_parentctx, _parentState)); + _localctx = new RelExpContext(_parentctx, _parentState); pushNewRecursionContext(_localctx, _startState, RULE_relExp); - setState(323); + setState(326); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(324); - ((BinaryRelExpContext)_localctx).op = _input.LT(1); + setState(327); + ((RelExpContext)_localctx).op = _input.LT(1); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 7864320L) != 0)) ) { - ((BinaryRelExpContext)_localctx).op = (Token)_errHandler.recoverInline(this); + ((RelExpContext)_localctx).op = (Token)_errHandler.recoverInline(this); } else { if ( _input.LA(1)==Token.EOF ) matchedEOF = true; _errHandler.reportMatch(this); consume(); } - setState(325); + setState(328); addExp(0); } } } - setState(330); + setState(333); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,32,_ctx); } @@ -2424,51 +2001,19 @@ public class SysYParser extends Parser { @SuppressWarnings("CheckReturnValue") public static class EqExpContext extends ParserRuleContext { - public EqExpContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_eqExp; } - - public EqExpContext() { } - public void copyFrom(EqExpContext ctx) { - super.copyFrom(ctx); - } - } - @SuppressWarnings("CheckReturnValue") - public static class BinaryEqExpContext extends EqExpContext { public Token op; - public EqExpContext eqExp() { - return getRuleContext(EqExpContext.class,0); - } public RelExpContext relExp() { return getRuleContext(RelExpContext.class,0); } + public EqExpContext eqExp() { + return getRuleContext(EqExpContext.class,0); + } public TerminalNode EQ() { return getToken(SysYParser.EQ, 0); } public TerminalNode NE() { return getToken(SysYParser.NE, 0); } - public BinaryEqExpContext(EqExpContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterBinaryEqExp(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitBinaryEqExp(this); - } - } - @SuppressWarnings("CheckReturnValue") - public static class RelEqExpContext extends EqExpContext { - public RelExpContext relExp() { - return getRuleContext(RelExpContext.class,0); - } - public RelEqExpContext(EqExpContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterRelEqExp(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitRelEqExp(this); + public EqExpContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); } + @Override public int getRuleIndex() { return RULE_eqExp; } } public final EqExpContext eqExp() throws RecognitionException { @@ -2480,23 +2025,19 @@ public class SysYParser extends Parser { int _parentState = getState(); EqExpContext _localctx = new EqExpContext(_ctx, _parentState); EqExpContext _prevctx = _localctx; - int _startState = 54; - enterRecursionRule(_localctx, 54, RULE_eqExp, _p); + int _startState = 56; + enterRecursionRule(_localctx, 56, RULE_eqExp, _p); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { { - _localctx = new RelEqExpContext(_localctx); - _ctx = _localctx; - _prevctx = _localctx; - - setState(332); + setState(335); relExp(0); } _ctx.stop = _input.LT(-1); - setState(339); + setState(342); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,33,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -2505,27 +2046,27 @@ public class SysYParser extends Parser { _prevctx = _localctx; { { - _localctx = new BinaryEqExpContext(new EqExpContext(_parentctx, _parentState)); + _localctx = new EqExpContext(_parentctx, _parentState); pushNewRecursionContext(_localctx, _startState, RULE_eqExp); - setState(334); + setState(337); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(335); - ((BinaryEqExpContext)_localctx).op = _input.LT(1); + setState(338); + ((EqExpContext)_localctx).op = _input.LT(1); _la = _input.LA(1); if ( !(_la==EQ || _la==NE) ) { - ((BinaryEqExpContext)_localctx).op = (Token)_errHandler.recoverInline(this); + ((EqExpContext)_localctx).op = (Token)_errHandler.recoverInline(this); } else { if ( _input.LA(1)==Token.EOF ) matchedEOF = true; _errHandler.reportMatch(this); consume(); } - setState(336); + setState(339); relExp(0); } } } - setState(341); + setState(344); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,33,_ctx); } @@ -2544,49 +2085,17 @@ public class SysYParser extends Parser { @SuppressWarnings("CheckReturnValue") public static class LAndExpContext extends ParserRuleContext { - public LAndExpContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_lAndExp; } - - public LAndExpContext() { } - public void copyFrom(LAndExpContext ctx) { - super.copyFrom(ctx); - } - } - @SuppressWarnings("CheckReturnValue") - public static class EqLAndExpContext extends LAndExpContext { public EqExpContext eqExp() { return getRuleContext(EqExpContext.class,0); } - public EqLAndExpContext(LAndExpContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterEqLAndExp(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitEqLAndExp(this); - } - } - @SuppressWarnings("CheckReturnValue") - public static class BinaryLAndExpContext extends LAndExpContext { public LAndExpContext lAndExp() { return getRuleContext(LAndExpContext.class,0); } public TerminalNode AND() { return getToken(SysYParser.AND, 0); } - public EqExpContext eqExp() { - return getRuleContext(EqExpContext.class,0); - } - public BinaryLAndExpContext(LAndExpContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterBinaryLAndExp(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitBinaryLAndExp(this); + public LAndExpContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); } + @Override public int getRuleIndex() { return RULE_lAndExp; } } public final LAndExpContext lAndExp() throws RecognitionException { @@ -2598,22 +2107,18 @@ public class SysYParser extends Parser { int _parentState = getState(); LAndExpContext _localctx = new LAndExpContext(_ctx, _parentState); LAndExpContext _prevctx = _localctx; - int _startState = 56; - enterRecursionRule(_localctx, 56, RULE_lAndExp, _p); + int _startState = 58; + enterRecursionRule(_localctx, 58, RULE_lAndExp, _p); try { int _alt; enterOuterAlt(_localctx, 1); { { - _localctx = new EqLAndExpContext(_localctx); - _ctx = _localctx; - _prevctx = _localctx; - - setState(343); + setState(346); eqExp(0); } _ctx.stop = _input.LT(-1); - setState(350); + setState(353); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,34,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -2622,18 +2127,18 @@ public class SysYParser extends Parser { _prevctx = _localctx; { { - _localctx = new BinaryLAndExpContext(new LAndExpContext(_parentctx, _parentState)); + _localctx = new LAndExpContext(_parentctx, _parentState); pushNewRecursionContext(_localctx, _startState, RULE_lAndExp); - setState(345); + setState(348); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(346); + setState(349); match(AND); - setState(347); + setState(350); eqExp(0); } } } - setState(352); + setState(355); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,34,_ctx); } @@ -2652,49 +2157,17 @@ public class SysYParser extends Parser { @SuppressWarnings("CheckReturnValue") public static class LOrExpContext extends ParserRuleContext { - public LOrExpContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_lOrExp; } - - public LOrExpContext() { } - public void copyFrom(LOrExpContext ctx) { - super.copyFrom(ctx); - } - } - @SuppressWarnings("CheckReturnValue") - public static class AndLOrExpContext extends LOrExpContext { public LAndExpContext lAndExp() { return getRuleContext(LAndExpContext.class,0); } - public AndLOrExpContext(LOrExpContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterAndLOrExp(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitAndLOrExp(this); - } - } - @SuppressWarnings("CheckReturnValue") - public static class BinaryLOrExpContext extends LOrExpContext { public LOrExpContext lOrExp() { return getRuleContext(LOrExpContext.class,0); } public TerminalNode OR() { return getToken(SysYParser.OR, 0); } - public LAndExpContext lAndExp() { - return getRuleContext(LAndExpContext.class,0); - } - public BinaryLOrExpContext(LOrExpContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterBinaryLOrExp(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitBinaryLOrExp(this); + public LOrExpContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); } + @Override public int getRuleIndex() { return RULE_lOrExp; } } public final LOrExpContext lOrExp() throws RecognitionException { @@ -2706,22 +2179,18 @@ public class SysYParser extends Parser { int _parentState = getState(); LOrExpContext _localctx = new LOrExpContext(_ctx, _parentState); LOrExpContext _prevctx = _localctx; - int _startState = 58; - enterRecursionRule(_localctx, 58, RULE_lOrExp, _p); + int _startState = 60; + enterRecursionRule(_localctx, 60, RULE_lOrExp, _p); try { int _alt; enterOuterAlt(_localctx, 1); { { - _localctx = new AndLOrExpContext(_localctx); - _ctx = _localctx; - _prevctx = _localctx; - - setState(354); + setState(357); lAndExp(0); } _ctx.stop = _input.LT(-1); - setState(361); + setState(364); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,35,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -2730,18 +2199,18 @@ public class SysYParser extends Parser { _prevctx = _localctx; { { - _localctx = new BinaryLOrExpContext(new LOrExpContext(_parentctx, _parentState)); + _localctx = new LOrExpContext(_parentctx, _parentState); pushNewRecursionContext(_localctx, _startState, RULE_lOrExp); - setState(356); + setState(359); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(357); + setState(360); match(OR); - setState(358); + setState(361); lAndExp(0); } } } - setState(363); + setState(366); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,35,_ctx); } @@ -2767,23 +2236,15 @@ public class SysYParser extends Parser { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_constExp; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).enterConstExp(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SysYListener ) ((SysYListener)listener).exitConstExp(this); - } } public final ConstExpContext constExp() throws RecognitionException { ConstExpContext _localctx = new ConstExpContext(_ctx, getState()); - enterRule(_localctx, 60, RULE_constExp); + enterRule(_localctx, 62, RULE_constExp); try { enterOuterAlt(_localctx, 1); { - setState(364); + setState(367); addExp(0); } } @@ -2800,17 +2261,17 @@ public class SysYParser extends Parser { public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { switch (ruleIndex) { - case 24: - return mulExp_sempred((MulExpContext)_localctx, predIndex); case 25: - return addExp_sempred((AddExpContext)_localctx, predIndex); + return mulExp_sempred((MulExpContext)_localctx, predIndex); case 26: - return relExp_sempred((RelExpContext)_localctx, predIndex); + return addExp_sempred((AddExpContext)_localctx, predIndex); case 27: - return eqExp_sempred((EqExpContext)_localctx, predIndex); + return relExp_sempred((RelExpContext)_localctx, predIndex); case 28: - return lAndExp_sempred((LAndExpContext)_localctx, predIndex); + return eqExp_sempred((EqExpContext)_localctx, predIndex); case 29: + return lAndExp_sempred((LAndExpContext)_localctx, predIndex); + case 30: return lOrExp_sempred((LOrExpContext)_localctx, predIndex); } return true; @@ -2859,7 +2320,7 @@ public class SysYParser extends Parser { } public static final String _serializedATN = - "\u0004\u0001\'\u016f\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ + "\u0004\u0001\'\u0172\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ "\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+ "\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002"+ "\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002"+ @@ -2869,231 +2330,232 @@ public class SysYParser extends Parser { "\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002\u0018\u0007\u0018"+ "\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002\u001b\u0007\u001b"+ "\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002\u001e\u0007\u001e"+ - "\u0001\u0000\u0001\u0000\u0004\u0000A\b\u0000\u000b\u0000\f\u0000B\u0001"+ - "\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0003\u0001I\b\u0001\u0001"+ - "\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0005\u0002P\b"+ - "\u0002\n\u0002\f\u0002S\t\u0002\u0001\u0002\u0001\u0002\u0001\u0003\u0001"+ - "\u0003\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0005"+ - "\u0004^\b\u0004\n\u0004\f\u0004a\t\u0004\u0001\u0004\u0001\u0004\u0001"+ - "\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0005"+ - "\u0005k\b\u0005\n\u0005\f\u0005n\t\u0005\u0003\u0005p\b\u0005\u0001\u0005"+ - "\u0003\u0005s\b\u0005\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006"+ - "\u0005\u0006y\b\u0006\n\u0006\f\u0006|\t\u0006\u0001\u0006\u0001\u0006"+ - "\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0005\u0007"+ - "\u0085\b\u0007\n\u0007\f\u0007\u0088\t\u0007\u0001\u0007\u0001\u0007\u0001"+ - "\u0007\u0001\u0007\u0001\u0007\u0005\u0007\u008f\b\u0007\n\u0007\f\u0007"+ - "\u0092\t\u0007\u0001\u0007\u0001\u0007\u0003\u0007\u0096\b\u0007\u0001"+ - "\b\u0001\b\u0001\b\u0001\b\u0001\b\u0005\b\u009d\b\b\n\b\f\b\u00a0\t\b"+ - "\u0003\b\u00a2\b\b\u0001\b\u0003\b\u00a5\b\b\u0001\t\u0001\t\u0001\t\u0001"+ - "\t\u0003\t\u00ab\b\t\u0001\t\u0001\t\u0001\t\u0001\n\u0001\n\u0001\u000b"+ - "\u0001\u000b\u0001\u000b\u0005\u000b\u00b5\b\u000b\n\u000b\f\u000b\u00b8"+ - "\t\u000b\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001"+ - "\f\u0001\f\u0001\f\u0001\f\u0005\f\u00c5\b\f\n\f\f\f\u00c8\t\f\u0003\f"+ - "\u00ca\b\f\u0001\r\u0001\r\u0005\r\u00ce\b\r\n\r\f\r\u00d1\t\r\u0001\r"+ - "\u0001\r\u0001\u000e\u0001\u000e\u0003\u000e\u00d7\b\u000e\u0001\u000f"+ - "\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0003\u000f"+ - "\u00df\b\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f"+ - "\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0003\u000f\u00ea\b\u000f"+ - "\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f"+ - "\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f"+ - "\u0003\u000f\u00f8\b\u000f\u0001\u000f\u0003\u000f\u00fb\b\u000f\u0001"+ - "\u0010\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001"+ - "\u0012\u0001\u0012\u0001\u0012\u0005\u0012\u0106\b\u0012\n\u0012\f\u0012"+ - "\u0109\t\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013"+ - "\u0001\u0013\u0003\u0013\u0111\b\u0013\u0001\u0014\u0001\u0014\u0001\u0015"+ - "\u0001\u0015\u0001\u0015\u0001\u0015\u0003\u0015\u0119\b\u0015\u0001\u0015"+ - "\u0001\u0015\u0001\u0015\u0001\u0015\u0003\u0015\u011f\b\u0015\u0001\u0016"+ - "\u0001\u0016\u0001\u0017\u0001\u0017\u0001\u0017\u0005\u0017\u0126\b\u0017"+ - "\n\u0017\f\u0017\u0129\t\u0017\u0001\u0018\u0001\u0018\u0001\u0018\u0001"+ - "\u0018\u0001\u0018\u0001\u0018\u0005\u0018\u0131\b\u0018\n\u0018\f\u0018"+ - "\u0134\t\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019"+ - "\u0001\u0019\u0005\u0019\u013c\b\u0019\n\u0019\f\u0019\u013f\t\u0019\u0001"+ - "\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0005"+ - "\u001a\u0147\b\u001a\n\u001a\f\u001a\u014a\t\u001a\u0001\u001b\u0001\u001b"+ - "\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0005\u001b\u0152\b\u001b"+ - "\n\u001b\f\u001b\u0155\t\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001"+ - "\u001c\u0001\u001c\u0001\u001c\u0005\u001c\u015d\b\u001c\n\u001c\f\u001c"+ - "\u0160\t\u001c\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d"+ - "\u0001\u001d\u0005\u001d\u0168\b\u001d\n\u001d\f\u001d\u016b\t\u001d\u0001"+ - "\u001e\u0001\u001e\u0001\u001e\u0000\u000602468:\u001f\u0000\u0002\u0004"+ - "\u0006\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a\u001c\u001e \""+ - "$&(*,.02468:<\u0000\b\u0001\u0000\u0002\u0003\u0001\u0000\u0002\u0004"+ - "\u0001\u0000#$\u0002\u0000\u000b\f\u0017\u0017\u0001\u0000\r\u000f\u0001"+ - "\u0000\u000b\f\u0001\u0000\u0013\u0016\u0001\u0000\u0011\u0012\u017b\u0000"+ - "@\u0001\u0000\u0000\u0000\u0002H\u0001\u0000\u0000\u0000\u0004J\u0001"+ - "\u0000\u0000\u0000\u0006V\u0001\u0000\u0000\u0000\bX\u0001\u0000\u0000"+ - "\u0000\nr\u0001\u0000\u0000\u0000\ft\u0001\u0000\u0000\u0000\u000e\u0095"+ - "\u0001\u0000\u0000\u0000\u0010\u00a4\u0001\u0000\u0000\u0000\u0012\u00a6"+ - "\u0001\u0000\u0000\u0000\u0014\u00af\u0001\u0000\u0000\u0000\u0016\u00b1"+ - "\u0001\u0000\u0000\u0000\u0018\u00c9\u0001\u0000\u0000\u0000\u001a\u00cb"+ - "\u0001\u0000\u0000\u0000\u001c\u00d6\u0001\u0000\u0000\u0000\u001e\u00fa"+ - "\u0001\u0000\u0000\u0000 \u00fc\u0001\u0000\u0000\u0000\"\u00fe\u0001"+ - "\u0000\u0000\u0000$\u0100\u0001\u0000\u0000\u0000&\u0110\u0001\u0000\u0000"+ - "\u0000(\u0112\u0001\u0000\u0000\u0000*\u011e\u0001\u0000\u0000\u0000,"+ - "\u0120\u0001\u0000\u0000\u0000.\u0122\u0001\u0000\u0000\u00000\u012a\u0001"+ - "\u0000\u0000\u00002\u0135\u0001\u0000\u0000\u00004\u0140\u0001\u0000\u0000"+ - "\u00006\u014b\u0001\u0000\u0000\u00008\u0156\u0001\u0000\u0000\u0000:"+ - "\u0161\u0001\u0000\u0000\u0000<\u016c\u0001\u0000\u0000\u0000>A\u0003"+ - "\u0002\u0001\u0000?A\u0003\u0012\t\u0000@>\u0001\u0000\u0000\u0000@?\u0001"+ - "\u0000\u0000\u0000AB\u0001\u0000\u0000\u0000B@\u0001\u0000\u0000\u0000"+ - "BC\u0001\u0000\u0000\u0000CD\u0001\u0000\u0000\u0000DE\u0005\u0000\u0000"+ - "\u0001E\u0001\u0001\u0000\u0000\u0000FI\u0003\u0004\u0002\u0000GI\u0003"+ - "\f\u0006\u0000HF\u0001\u0000\u0000\u0000HG\u0001\u0000\u0000\u0000I\u0003"+ - "\u0001\u0000\u0000\u0000JK\u0005\u0001\u0000\u0000KL\u0003\u0006\u0003"+ - "\u0000LQ\u0003\b\u0004\u0000MN\u0005 \u0000\u0000NP\u0003\b\u0004\u0000"+ - "OM\u0001\u0000\u0000\u0000PS\u0001\u0000\u0000\u0000QO\u0001\u0000\u0000"+ - "\u0000QR\u0001\u0000\u0000\u0000RT\u0001\u0000\u0000\u0000SQ\u0001\u0000"+ - "\u0000\u0000TU\u0005!\u0000\u0000U\u0005\u0001\u0000\u0000\u0000VW\u0007"+ - "\u0000\u0000\u0000W\u0007\u0001\u0000\u0000\u0000X_\u0005\"\u0000\u0000"+ - "YZ\u0005\u001c\u0000\u0000Z[\u0003<\u001e\u0000[\\\u0005\u001d\u0000\u0000"+ - "\\^\u0001\u0000\u0000\u0000]Y\u0001\u0000\u0000\u0000^a\u0001\u0000\u0000"+ - "\u0000_]\u0001\u0000\u0000\u0000_`\u0001\u0000\u0000\u0000`b\u0001\u0000"+ - "\u0000\u0000a_\u0001\u0000\u0000\u0000bc\u0005\u0010\u0000\u0000cd\u0003"+ - "\n\u0005\u0000d\t\u0001\u0000\u0000\u0000es\u0003<\u001e\u0000fo\u0005"+ - "\u001e\u0000\u0000gl\u0003\n\u0005\u0000hi\u0005 \u0000\u0000ik\u0003"+ - "\n\u0005\u0000jh\u0001\u0000\u0000\u0000kn\u0001\u0000\u0000\u0000lj\u0001"+ - "\u0000\u0000\u0000lm\u0001\u0000\u0000\u0000mp\u0001\u0000\u0000\u0000"+ - "nl\u0001\u0000\u0000\u0000og\u0001\u0000\u0000\u0000op\u0001\u0000\u0000"+ - "\u0000pq\u0001\u0000\u0000\u0000qs\u0005\u001f\u0000\u0000re\u0001\u0000"+ - "\u0000\u0000rf\u0001\u0000\u0000\u0000s\u000b\u0001\u0000\u0000\u0000"+ - "tu\u0003\u0006\u0003\u0000uz\u0003\u000e\u0007\u0000vw\u0005 \u0000\u0000"+ - "wy\u0003\u000e\u0007\u0000xv\u0001\u0000\u0000\u0000y|\u0001\u0000\u0000"+ - "\u0000zx\u0001\u0000\u0000\u0000z{\u0001\u0000\u0000\u0000{}\u0001\u0000"+ - "\u0000\u0000|z\u0001\u0000\u0000\u0000}~\u0005!\u0000\u0000~\r\u0001\u0000"+ - "\u0000\u0000\u007f\u0086\u0005\"\u0000\u0000\u0080\u0081\u0005\u001c\u0000"+ - "\u0000\u0081\u0082\u0003<\u001e\u0000\u0082\u0083\u0005\u001d\u0000\u0000"+ - "\u0083\u0085\u0001\u0000\u0000\u0000\u0084\u0080\u0001\u0000\u0000\u0000"+ - "\u0085\u0088\u0001\u0000\u0000\u0000\u0086\u0084\u0001\u0000\u0000\u0000"+ - "\u0086\u0087\u0001\u0000\u0000\u0000\u0087\u0096\u0001\u0000\u0000\u0000"+ - "\u0088\u0086\u0001\u0000\u0000\u0000\u0089\u0090\u0005\"\u0000\u0000\u008a"+ - "\u008b\u0005\u001c\u0000\u0000\u008b\u008c\u0003<\u001e\u0000\u008c\u008d"+ - "\u0005\u001d\u0000\u0000\u008d\u008f\u0001\u0000\u0000\u0000\u008e\u008a"+ - "\u0001\u0000\u0000\u0000\u008f\u0092\u0001\u0000\u0000\u0000\u0090\u008e"+ - "\u0001\u0000\u0000\u0000\u0090\u0091\u0001\u0000\u0000\u0000\u0091\u0093"+ - "\u0001\u0000\u0000\u0000\u0092\u0090\u0001\u0000\u0000\u0000\u0093\u0094"+ - "\u0005\u0010\u0000\u0000\u0094\u0096\u0003\u0010\b\u0000\u0095\u007f\u0001"+ - "\u0000\u0000\u0000\u0095\u0089\u0001\u0000\u0000\u0000\u0096\u000f\u0001"+ - "\u0000\u0000\u0000\u0097\u00a5\u0003 \u0010\u0000\u0098\u00a1\u0005\u001e"+ - "\u0000\u0000\u0099\u009e\u0003\u0010\b\u0000\u009a\u009b\u0005 \u0000"+ - "\u0000\u009b\u009d\u0003\u0010\b\u0000\u009c\u009a\u0001\u0000\u0000\u0000"+ - "\u009d\u00a0\u0001\u0000\u0000\u0000\u009e\u009c\u0001\u0000\u0000\u0000"+ - "\u009e\u009f\u0001\u0000\u0000\u0000\u009f\u00a2\u0001\u0000\u0000\u0000"+ - "\u00a0\u009e\u0001\u0000\u0000\u0000\u00a1\u0099\u0001\u0000\u0000\u0000"+ - "\u00a1\u00a2\u0001\u0000\u0000\u0000\u00a2\u00a3\u0001\u0000\u0000\u0000"+ - "\u00a3\u00a5\u0005\u001f\u0000\u0000\u00a4\u0097\u0001\u0000\u0000\u0000"+ - "\u00a4\u0098\u0001\u0000\u0000\u0000\u00a5\u0011\u0001\u0000\u0000\u0000"+ - "\u00a6\u00a7\u0003\u0014\n\u0000\u00a7\u00a8\u0005\"\u0000\u0000\u00a8"+ - "\u00aa\u0005\u001a\u0000\u0000\u00a9\u00ab\u0003\u0016\u000b\u0000\u00aa"+ - "\u00a9\u0001\u0000\u0000\u0000\u00aa\u00ab\u0001\u0000\u0000\u0000\u00ab"+ - "\u00ac\u0001\u0000\u0000\u0000\u00ac\u00ad\u0005\u001b\u0000\u0000\u00ad"+ - "\u00ae\u0003\u001a\r\u0000\u00ae\u0013\u0001\u0000\u0000\u0000\u00af\u00b0"+ - "\u0007\u0001\u0000\u0000\u00b0\u0015\u0001\u0000\u0000\u0000\u00b1\u00b6"+ - "\u0003\u0018\f\u0000\u00b2\u00b3\u0005 \u0000\u0000\u00b3\u00b5\u0003"+ - "\u0018\f\u0000\u00b4\u00b2\u0001\u0000\u0000\u0000\u00b5\u00b8\u0001\u0000"+ - "\u0000\u0000\u00b6\u00b4\u0001\u0000\u0000\u0000\u00b6\u00b7\u0001\u0000"+ - "\u0000\u0000\u00b7\u0017\u0001\u0000\u0000\u0000\u00b8\u00b6\u0001\u0000"+ - "\u0000\u0000\u00b9\u00ba\u0003\u0006\u0003\u0000\u00ba\u00bb\u0005\"\u0000"+ - "\u0000\u00bb\u00ca\u0001\u0000\u0000\u0000\u00bc\u00bd\u0003\u0006\u0003"+ - "\u0000\u00bd\u00be\u0005\"\u0000\u0000\u00be\u00bf\u0005\u001c\u0000\u0000"+ - "\u00bf\u00c6\u0005\u001d\u0000\u0000\u00c0\u00c1\u0005\u001c\u0000\u0000"+ - "\u00c1\u00c2\u0003 \u0010\u0000\u00c2\u00c3\u0005\u001d\u0000\u0000\u00c3"+ - "\u00c5\u0001\u0000\u0000\u0000\u00c4\u00c0\u0001\u0000\u0000\u0000\u00c5"+ - "\u00c8\u0001\u0000\u0000\u0000\u00c6\u00c4\u0001\u0000\u0000\u0000\u00c6"+ - "\u00c7\u0001\u0000\u0000\u0000\u00c7\u00ca\u0001\u0000\u0000\u0000\u00c8"+ - "\u00c6\u0001\u0000\u0000\u0000\u00c9\u00b9\u0001\u0000\u0000\u0000\u00c9"+ - "\u00bc\u0001\u0000\u0000\u0000\u00ca\u0019\u0001\u0000\u0000\u0000\u00cb"+ - "\u00cf\u0005\u001e\u0000\u0000\u00cc\u00ce\u0003\u001c\u000e\u0000\u00cd"+ - "\u00cc\u0001\u0000\u0000\u0000\u00ce\u00d1\u0001\u0000\u0000\u0000\u00cf"+ - "\u00cd\u0001\u0000\u0000\u0000\u00cf\u00d0\u0001\u0000\u0000\u0000\u00d0"+ - "\u00d2\u0001\u0000\u0000\u0000\u00d1\u00cf\u0001\u0000\u0000\u0000\u00d2"+ - "\u00d3\u0005\u001f\u0000\u0000\u00d3\u001b\u0001\u0000\u0000\u0000\u00d4"+ - "\u00d7\u0003\u0002\u0001\u0000\u00d5\u00d7\u0003\u001e\u000f\u0000\u00d6"+ - "\u00d4\u0001\u0000\u0000\u0000\u00d6\u00d5\u0001\u0000\u0000\u0000\u00d7"+ - "\u001d\u0001\u0000\u0000\u0000\u00d8\u00d9\u0003$\u0012\u0000\u00d9\u00da"+ - "\u0005\u0010\u0000\u0000\u00da\u00db\u0003 \u0010\u0000\u00db\u00dc\u0005"+ - "!\u0000\u0000\u00dc\u00fb\u0001\u0000\u0000\u0000\u00dd\u00df\u0003 \u0010"+ - "\u0000\u00de\u00dd\u0001\u0000\u0000\u0000\u00de\u00df\u0001\u0000\u0000"+ - "\u0000\u00df\u00e0\u0001\u0000\u0000\u0000\u00e0\u00fb\u0005!\u0000\u0000"+ - "\u00e1\u00fb\u0003\u001a\r\u0000\u00e2\u00e3\u0005\u0005\u0000\u0000\u00e3"+ - "\u00e4\u0005\u001a\u0000\u0000\u00e4\u00e5\u0003\"\u0011\u0000\u00e5\u00e6"+ - "\u0005\u001b\u0000\u0000\u00e6\u00e9\u0003\u001e\u000f\u0000\u00e7\u00e8"+ - "\u0005\u0006\u0000\u0000\u00e8\u00ea\u0003\u001e\u000f\u0000\u00e9\u00e7"+ - "\u0001\u0000\u0000\u0000\u00e9\u00ea\u0001\u0000\u0000\u0000\u00ea\u00fb"+ - "\u0001\u0000\u0000\u0000\u00eb\u00ec\u0005\u0007\u0000\u0000\u00ec\u00ed"+ - "\u0005\u001a\u0000\u0000\u00ed\u00ee\u0003\"\u0011\u0000\u00ee\u00ef\u0005"+ - "\u001b\u0000\u0000\u00ef\u00f0\u0003\u001e\u000f\u0000\u00f0\u00fb\u0001"+ - "\u0000\u0000\u0000\u00f1\u00f2\u0005\b\u0000\u0000\u00f2\u00fb\u0005!"+ - "\u0000\u0000\u00f3\u00f4\u0005\t\u0000\u0000\u00f4\u00fb\u0005!\u0000"+ - "\u0000\u00f5\u00f7\u0005\n\u0000\u0000\u00f6\u00f8\u0003 \u0010\u0000"+ - "\u00f7\u00f6\u0001\u0000\u0000\u0000\u00f7\u00f8\u0001\u0000\u0000\u0000"+ - "\u00f8\u00f9\u0001\u0000\u0000\u0000\u00f9\u00fb\u0005!\u0000\u0000\u00fa"+ - "\u00d8\u0001\u0000\u0000\u0000\u00fa\u00de\u0001\u0000\u0000\u0000\u00fa"+ - "\u00e1\u0001\u0000\u0000\u0000\u00fa\u00e2\u0001\u0000\u0000\u0000\u00fa"+ - "\u00eb\u0001\u0000\u0000\u0000\u00fa\u00f1\u0001\u0000\u0000\u0000\u00fa"+ - "\u00f3\u0001\u0000\u0000\u0000\u00fa\u00f5\u0001\u0000\u0000\u0000\u00fb"+ - "\u001f\u0001\u0000\u0000\u0000\u00fc\u00fd\u00032\u0019\u0000\u00fd!\u0001"+ - "\u0000\u0000\u0000\u00fe\u00ff\u0003:\u001d\u0000\u00ff#\u0001\u0000\u0000"+ - "\u0000\u0100\u0107\u0005\"\u0000\u0000\u0101\u0102\u0005\u001c\u0000\u0000"+ - "\u0102\u0103\u0003 \u0010\u0000\u0103\u0104\u0005\u001d\u0000\u0000\u0104"+ - "\u0106\u0001\u0000\u0000\u0000\u0105\u0101\u0001\u0000\u0000\u0000\u0106"+ - "\u0109\u0001\u0000\u0000\u0000\u0107\u0105\u0001\u0000\u0000\u0000\u0107"+ - "\u0108\u0001\u0000\u0000\u0000\u0108%\u0001\u0000\u0000\u0000\u0109\u0107"+ - "\u0001\u0000\u0000\u0000\u010a\u010b\u0005\u001a\u0000\u0000\u010b\u010c"+ - "\u0003 \u0010\u0000\u010c\u010d\u0005\u001b\u0000\u0000\u010d\u0111\u0001"+ - "\u0000\u0000\u0000\u010e\u0111\u0003$\u0012\u0000\u010f\u0111\u0003(\u0014"+ - "\u0000\u0110\u010a\u0001\u0000\u0000\u0000\u0110\u010e\u0001\u0000\u0000"+ - "\u0000\u0110\u010f\u0001\u0000\u0000\u0000\u0111\'\u0001\u0000\u0000\u0000"+ - "\u0112\u0113\u0007\u0002\u0000\u0000\u0113)\u0001\u0000\u0000\u0000\u0114"+ - "\u011f\u0003&\u0013\u0000\u0115\u0116\u0005\"\u0000\u0000\u0116\u0118"+ - "\u0005\u001a\u0000\u0000\u0117\u0119\u0003.\u0017\u0000\u0118\u0117\u0001"+ - "\u0000\u0000\u0000\u0118\u0119\u0001\u0000\u0000\u0000\u0119\u011a\u0001"+ - "\u0000\u0000\u0000\u011a\u011f\u0005\u001b\u0000\u0000\u011b\u011c\u0003"+ - ",\u0016\u0000\u011c\u011d\u0003*\u0015\u0000\u011d\u011f\u0001\u0000\u0000"+ - "\u0000\u011e\u0114\u0001\u0000\u0000\u0000\u011e\u0115\u0001\u0000\u0000"+ - "\u0000\u011e\u011b\u0001\u0000\u0000\u0000\u011f+\u0001\u0000\u0000\u0000"+ - "\u0120\u0121\u0007\u0003\u0000\u0000\u0121-\u0001\u0000\u0000\u0000\u0122"+ - "\u0127\u0003 \u0010\u0000\u0123\u0124\u0005 \u0000\u0000\u0124\u0126\u0003"+ - " \u0010\u0000\u0125\u0123\u0001\u0000\u0000\u0000\u0126\u0129\u0001\u0000"+ - "\u0000\u0000\u0127\u0125\u0001\u0000\u0000\u0000\u0127\u0128\u0001\u0000"+ - "\u0000\u0000\u0128/\u0001\u0000\u0000\u0000\u0129\u0127\u0001\u0000\u0000"+ - "\u0000\u012a\u012b\u0006\u0018\uffff\uffff\u0000\u012b\u012c\u0003*\u0015"+ - "\u0000\u012c\u0132\u0001\u0000\u0000\u0000\u012d\u012e\n\u0001\u0000\u0000"+ - "\u012e\u012f\u0007\u0004\u0000\u0000\u012f\u0131\u0003*\u0015\u0000\u0130"+ - "\u012d\u0001\u0000\u0000\u0000\u0131\u0134\u0001\u0000\u0000\u0000\u0132"+ - "\u0130\u0001\u0000\u0000\u0000\u0132\u0133\u0001\u0000\u0000\u0000\u0133"+ - "1\u0001\u0000\u0000\u0000\u0134\u0132\u0001\u0000\u0000\u0000\u0135\u0136"+ - "\u0006\u0019\uffff\uffff\u0000\u0136\u0137\u00030\u0018\u0000\u0137\u013d"+ - "\u0001\u0000\u0000\u0000\u0138\u0139\n\u0001\u0000\u0000\u0139\u013a\u0007"+ - "\u0005\u0000\u0000\u013a\u013c\u00030\u0018\u0000\u013b\u0138\u0001\u0000"+ - "\u0000\u0000\u013c\u013f\u0001\u0000\u0000\u0000\u013d\u013b\u0001\u0000"+ - "\u0000\u0000\u013d\u013e\u0001\u0000\u0000\u0000\u013e3\u0001\u0000\u0000"+ - "\u0000\u013f\u013d\u0001\u0000\u0000\u0000\u0140\u0141\u0006\u001a\uffff"+ - "\uffff\u0000\u0141\u0142\u00032\u0019\u0000\u0142\u0148\u0001\u0000\u0000"+ - "\u0000\u0143\u0144\n\u0001\u0000\u0000\u0144\u0145\u0007\u0006\u0000\u0000"+ - "\u0145\u0147\u00032\u0019\u0000\u0146\u0143\u0001\u0000\u0000\u0000\u0147"+ - "\u014a\u0001\u0000\u0000\u0000\u0148\u0146\u0001\u0000\u0000\u0000\u0148"+ - "\u0149\u0001\u0000\u0000\u0000\u01495\u0001\u0000\u0000\u0000\u014a\u0148"+ - "\u0001\u0000\u0000\u0000\u014b\u014c\u0006\u001b\uffff\uffff\u0000\u014c"+ - "\u014d\u00034\u001a\u0000\u014d\u0153\u0001\u0000\u0000\u0000\u014e\u014f"+ - "\n\u0001\u0000\u0000\u014f\u0150\u0007\u0007\u0000\u0000\u0150\u0152\u0003"+ - "4\u001a\u0000\u0151\u014e\u0001\u0000\u0000\u0000\u0152\u0155\u0001\u0000"+ - "\u0000\u0000\u0153\u0151\u0001\u0000\u0000\u0000\u0153\u0154\u0001\u0000"+ - "\u0000\u0000\u01547\u0001\u0000\u0000\u0000\u0155\u0153\u0001\u0000\u0000"+ - "\u0000\u0156\u0157\u0006\u001c\uffff\uffff\u0000\u0157\u0158\u00036\u001b"+ - "\u0000\u0158\u015e\u0001\u0000\u0000\u0000\u0159\u015a\n\u0001\u0000\u0000"+ - "\u015a\u015b\u0005\u0018\u0000\u0000\u015b\u015d\u00036\u001b\u0000\u015c"+ - "\u0159\u0001\u0000\u0000\u0000\u015d\u0160\u0001\u0000\u0000\u0000\u015e"+ - "\u015c\u0001\u0000\u0000\u0000\u015e\u015f\u0001\u0000\u0000\u0000\u015f"+ - "9\u0001\u0000\u0000\u0000\u0160\u015e\u0001\u0000\u0000\u0000\u0161\u0162"+ - "\u0006\u001d\uffff\uffff\u0000\u0162\u0163\u00038\u001c\u0000\u0163\u0169"+ - "\u0001\u0000\u0000\u0000\u0164\u0165\n\u0001\u0000\u0000\u0165\u0166\u0005"+ - "\u0019\u0000\u0000\u0166\u0168\u00038\u001c\u0000\u0167\u0164\u0001\u0000"+ - "\u0000\u0000\u0168\u016b\u0001\u0000\u0000\u0000\u0169\u0167\u0001\u0000"+ - "\u0000\u0000\u0169\u016a\u0001\u0000\u0000\u0000\u016a;\u0001\u0000\u0000"+ - "\u0000\u016b\u0169\u0001\u0000\u0000\u0000\u016c\u016d\u00032\u0019\u0000"+ - "\u016d=\u0001\u0000\u0000\u0000$@BHQ_lorz\u0086\u0090\u0095\u009e\u00a1"+ - "\u00a4\u00aa\u00b6\u00c6\u00c9\u00cf\u00d6\u00de\u00e9\u00f7\u00fa\u0107"+ - "\u0110\u0118\u011e\u0127\u0132\u013d\u0148\u0153\u015e\u0169"; + "\u0002\u001f\u0007\u001f\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001"+ + "\u0001\u0001\u0004\u0001F\b\u0001\u000b\u0001\f\u0001G\u0001\u0002\u0001"+ + "\u0002\u0003\u0002L\b\u0002\u0001\u0003\u0001\u0003\u0001\u0003\u0001"+ + "\u0003\u0001\u0003\u0005\u0003S\b\u0003\n\u0003\f\u0003V\t\u0003\u0001"+ + "\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005\u0001"+ + "\u0005\u0001\u0005\u0001\u0005\u0005\u0005a\b\u0005\n\u0005\f\u0005d\t"+ + "\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006\u0001"+ + "\u0006\u0001\u0006\u0001\u0006\u0005\u0006n\b\u0006\n\u0006\f\u0006q\t"+ + "\u0006\u0003\u0006s\b\u0006\u0001\u0006\u0003\u0006v\b\u0006\u0001\u0007"+ + "\u0001\u0007\u0001\u0007\u0001\u0007\u0005\u0007|\b\u0007\n\u0007\f\u0007"+ + "\u007f\t\u0007\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001\b\u0001\b"+ + "\u0001\b\u0005\b\u0088\b\b\n\b\f\b\u008b\t\b\u0001\b\u0001\b\u0001\b\u0001"+ + "\b\u0001\b\u0005\b\u0092\b\b\n\b\f\b\u0095\t\b\u0001\b\u0001\b\u0003\b"+ + "\u0099\b\b\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0005\t\u00a0\b\t\n"+ + "\t\f\t\u00a3\t\t\u0003\t\u00a5\b\t\u0001\t\u0003\t\u00a8\b\t\u0001\n\u0001"+ + "\n\u0001\n\u0001\n\u0003\n\u00ae\b\n\u0001\n\u0001\n\u0001\n\u0001\u000b"+ + "\u0001\u000b\u0001\f\u0001\f\u0001\f\u0005\f\u00b8\b\f\n\f\f\f\u00bb\t"+ + "\f\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001"+ + "\r\u0001\r\u0001\r\u0005\r\u00c8\b\r\n\r\f\r\u00cb\t\r\u0003\r\u00cd\b"+ + "\r\u0001\u000e\u0001\u000e\u0005\u000e\u00d1\b\u000e\n\u000e\f\u000e\u00d4"+ + "\t\u000e\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0003\u000f\u00da"+ + "\b\u000f\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+ + "\u0010\u0003\u0010\u00e2\b\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+ + "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0003"+ + "\u0010\u00ed\b\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+ + "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+ + "\u0010\u0001\u0010\u0003\u0010\u00fb\b\u0010\u0001\u0010\u0003\u0010\u00fe"+ + "\b\u0010\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0013\u0001"+ + "\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0005\u0013\u0109\b\u0013\n"+ + "\u0013\f\u0013\u010c\t\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+ + "\u0014\u0001\u0014\u0001\u0014\u0003\u0014\u0114\b\u0014\u0001\u0015\u0001"+ + "\u0015\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0003\u0016\u011c"+ + "\b\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0003\u0016\u0122"+ + "\b\u0016\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0018\u0005"+ + "\u0018\u0129\b\u0018\n\u0018\f\u0018\u012c\t\u0018\u0001\u0019\u0001\u0019"+ + "\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0005\u0019\u0134\b\u0019"+ + "\n\u0019\f\u0019\u0137\t\u0019\u0001\u001a\u0001\u001a\u0001\u001a\u0001"+ + "\u001a\u0001\u001a\u0001\u001a\u0005\u001a\u013f\b\u001a\n\u001a\f\u001a"+ + "\u0142\t\u001a\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b"+ + "\u0001\u001b\u0005\u001b\u014a\b\u001b\n\u001b\f\u001b\u014d\t\u001b\u0001"+ + "\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0005"+ + "\u001c\u0155\b\u001c\n\u001c\f\u001c\u0158\t\u001c\u0001\u001d\u0001\u001d"+ + "\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0005\u001d\u0160\b\u001d"+ + "\n\u001d\f\u001d\u0163\t\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001"+ + "\u001e\u0001\u001e\u0001\u001e\u0005\u001e\u016b\b\u001e\n\u001e\f\u001e"+ + "\u016e\t\u001e\u0001\u001f\u0001\u001f\u0001\u001f\u0000\u00062468:< "+ + "\u0000\u0002\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a"+ + "\u001c\u001e \"$&(*,.02468:<>\u0000\b\u0001\u0000\u0002\u0003\u0001\u0000"+ + "\u0002\u0004\u0001\u0000#$\u0002\u0000\u000b\f\u0017\u0017\u0001\u0000"+ + "\r\u000f\u0001\u0000\u000b\f\u0001\u0000\u0013\u0016\u0001\u0000\u0011"+ + "\u0012\u017d\u0000@\u0001\u0000\u0000\u0000\u0002E\u0001\u0000\u0000\u0000"+ + "\u0004K\u0001\u0000\u0000\u0000\u0006M\u0001\u0000\u0000\u0000\bY\u0001"+ + "\u0000\u0000\u0000\n[\u0001\u0000\u0000\u0000\fu\u0001\u0000\u0000\u0000"+ + "\u000ew\u0001\u0000\u0000\u0000\u0010\u0098\u0001\u0000\u0000\u0000\u0012"+ + "\u00a7\u0001\u0000\u0000\u0000\u0014\u00a9\u0001\u0000\u0000\u0000\u0016"+ + "\u00b2\u0001\u0000\u0000\u0000\u0018\u00b4\u0001\u0000\u0000\u0000\u001a"+ + "\u00cc\u0001\u0000\u0000\u0000\u001c\u00ce\u0001\u0000\u0000\u0000\u001e"+ + "\u00d9\u0001\u0000\u0000\u0000 \u00fd\u0001\u0000\u0000\u0000\"\u00ff"+ + "\u0001\u0000\u0000\u0000$\u0101\u0001\u0000\u0000\u0000&\u0103\u0001\u0000"+ + "\u0000\u0000(\u0113\u0001\u0000\u0000\u0000*\u0115\u0001\u0000\u0000\u0000"+ + ",\u0121\u0001\u0000\u0000\u0000.\u0123\u0001\u0000\u0000\u00000\u0125"+ + "\u0001\u0000\u0000\u00002\u012d\u0001\u0000\u0000\u00004\u0138\u0001\u0000"+ + "\u0000\u00006\u0143\u0001\u0000\u0000\u00008\u014e\u0001\u0000\u0000\u0000"+ + ":\u0159\u0001\u0000\u0000\u0000<\u0164\u0001\u0000\u0000\u0000>\u016f"+ + "\u0001\u0000\u0000\u0000@A\u0003\u0002\u0001\u0000AB\u0005\u0000\u0000"+ + "\u0001B\u0001\u0001\u0000\u0000\u0000CF\u0003\u0004\u0002\u0000DF\u0003"+ + "\u0014\n\u0000EC\u0001\u0000\u0000\u0000ED\u0001\u0000\u0000\u0000FG\u0001"+ + "\u0000\u0000\u0000GE\u0001\u0000\u0000\u0000GH\u0001\u0000\u0000\u0000"+ + "H\u0003\u0001\u0000\u0000\u0000IL\u0003\u0006\u0003\u0000JL\u0003\u000e"+ + "\u0007\u0000KI\u0001\u0000\u0000\u0000KJ\u0001\u0000\u0000\u0000L\u0005"+ + "\u0001\u0000\u0000\u0000MN\u0005\u0001\u0000\u0000NO\u0003\b\u0004\u0000"+ + "OT\u0003\n\u0005\u0000PQ\u0005 \u0000\u0000QS\u0003\n\u0005\u0000RP\u0001"+ + "\u0000\u0000\u0000SV\u0001\u0000\u0000\u0000TR\u0001\u0000\u0000\u0000"+ + "TU\u0001\u0000\u0000\u0000UW\u0001\u0000\u0000\u0000VT\u0001\u0000\u0000"+ + "\u0000WX\u0005!\u0000\u0000X\u0007\u0001\u0000\u0000\u0000YZ\u0007\u0000"+ + "\u0000\u0000Z\t\u0001\u0000\u0000\u0000[b\u0005\"\u0000\u0000\\]\u0005"+ + "\u001c\u0000\u0000]^\u0003>\u001f\u0000^_\u0005\u001d\u0000\u0000_a\u0001"+ + "\u0000\u0000\u0000`\\\u0001\u0000\u0000\u0000ad\u0001\u0000\u0000\u0000"+ + "b`\u0001\u0000\u0000\u0000bc\u0001\u0000\u0000\u0000ce\u0001\u0000\u0000"+ + "\u0000db\u0001\u0000\u0000\u0000ef\u0005\u0010\u0000\u0000fg\u0003\f\u0006"+ + "\u0000g\u000b\u0001\u0000\u0000\u0000hv\u0003>\u001f\u0000ir\u0005\u001e"+ + "\u0000\u0000jo\u0003\f\u0006\u0000kl\u0005 \u0000\u0000ln\u0003\f\u0006"+ + "\u0000mk\u0001\u0000\u0000\u0000nq\u0001\u0000\u0000\u0000om\u0001\u0000"+ + "\u0000\u0000op\u0001\u0000\u0000\u0000ps\u0001\u0000\u0000\u0000qo\u0001"+ + "\u0000\u0000\u0000rj\u0001\u0000\u0000\u0000rs\u0001\u0000\u0000\u0000"+ + "st\u0001\u0000\u0000\u0000tv\u0005\u001f\u0000\u0000uh\u0001\u0000\u0000"+ + "\u0000ui\u0001\u0000\u0000\u0000v\r\u0001\u0000\u0000\u0000wx\u0003\b"+ + "\u0004\u0000x}\u0003\u0010\b\u0000yz\u0005 \u0000\u0000z|\u0003\u0010"+ + "\b\u0000{y\u0001\u0000\u0000\u0000|\u007f\u0001\u0000\u0000\u0000}{\u0001"+ + "\u0000\u0000\u0000}~\u0001\u0000\u0000\u0000~\u0080\u0001\u0000\u0000"+ + "\u0000\u007f}\u0001\u0000\u0000\u0000\u0080\u0081\u0005!\u0000\u0000\u0081"+ + "\u000f\u0001\u0000\u0000\u0000\u0082\u0089\u0005\"\u0000\u0000\u0083\u0084"+ + "\u0005\u001c\u0000\u0000\u0084\u0085\u0003>\u001f\u0000\u0085\u0086\u0005"+ + "\u001d\u0000\u0000\u0086\u0088\u0001\u0000\u0000\u0000\u0087\u0083\u0001"+ + "\u0000\u0000\u0000\u0088\u008b\u0001\u0000\u0000\u0000\u0089\u0087\u0001"+ + "\u0000\u0000\u0000\u0089\u008a\u0001\u0000\u0000\u0000\u008a\u0099\u0001"+ + "\u0000\u0000\u0000\u008b\u0089\u0001\u0000\u0000\u0000\u008c\u0093\u0005"+ + "\"\u0000\u0000\u008d\u008e\u0005\u001c\u0000\u0000\u008e\u008f\u0003>"+ + "\u001f\u0000\u008f\u0090\u0005\u001d\u0000\u0000\u0090\u0092\u0001\u0000"+ + "\u0000\u0000\u0091\u008d\u0001\u0000\u0000\u0000\u0092\u0095\u0001\u0000"+ + "\u0000\u0000\u0093\u0091\u0001\u0000\u0000\u0000\u0093\u0094\u0001\u0000"+ + "\u0000\u0000\u0094\u0096\u0001\u0000\u0000\u0000\u0095\u0093\u0001\u0000"+ + "\u0000\u0000\u0096\u0097\u0005\u0010\u0000\u0000\u0097\u0099\u0003\u0012"+ + "\t\u0000\u0098\u0082\u0001\u0000\u0000\u0000\u0098\u008c\u0001\u0000\u0000"+ + "\u0000\u0099\u0011\u0001\u0000\u0000\u0000\u009a\u00a8\u0003\"\u0011\u0000"+ + "\u009b\u00a4\u0005\u001e\u0000\u0000\u009c\u00a1\u0003\u0012\t\u0000\u009d"+ + "\u009e\u0005 \u0000\u0000\u009e\u00a0\u0003\u0012\t\u0000\u009f\u009d"+ + "\u0001\u0000\u0000\u0000\u00a0\u00a3\u0001\u0000\u0000\u0000\u00a1\u009f"+ + "\u0001\u0000\u0000\u0000\u00a1\u00a2\u0001\u0000\u0000\u0000\u00a2\u00a5"+ + "\u0001\u0000\u0000\u0000\u00a3\u00a1\u0001\u0000\u0000\u0000\u00a4\u009c"+ + "\u0001\u0000\u0000\u0000\u00a4\u00a5\u0001\u0000\u0000\u0000\u00a5\u00a6"+ + "\u0001\u0000\u0000\u0000\u00a6\u00a8\u0005\u001f\u0000\u0000\u00a7\u009a"+ + "\u0001\u0000\u0000\u0000\u00a7\u009b\u0001\u0000\u0000\u0000\u00a8\u0013"+ + "\u0001\u0000\u0000\u0000\u00a9\u00aa\u0003\u0016\u000b\u0000\u00aa\u00ab"+ + "\u0005\"\u0000\u0000\u00ab\u00ad\u0005\u001a\u0000\u0000\u00ac\u00ae\u0003"+ + "\u0018\f\u0000\u00ad\u00ac\u0001\u0000\u0000\u0000\u00ad\u00ae\u0001\u0000"+ + "\u0000\u0000\u00ae\u00af\u0001\u0000\u0000\u0000\u00af\u00b0\u0005\u001b"+ + "\u0000\u0000\u00b0\u00b1\u0003\u001c\u000e\u0000\u00b1\u0015\u0001\u0000"+ + "\u0000\u0000\u00b2\u00b3\u0007\u0001\u0000\u0000\u00b3\u0017\u0001\u0000"+ + "\u0000\u0000\u00b4\u00b9\u0003\u001a\r\u0000\u00b5\u00b6\u0005 \u0000"+ + "\u0000\u00b6\u00b8\u0003\u001a\r\u0000\u00b7\u00b5\u0001\u0000\u0000\u0000"+ + "\u00b8\u00bb\u0001\u0000\u0000\u0000\u00b9\u00b7\u0001\u0000\u0000\u0000"+ + "\u00b9\u00ba\u0001\u0000\u0000\u0000\u00ba\u0019\u0001\u0000\u0000\u0000"+ + "\u00bb\u00b9\u0001\u0000\u0000\u0000\u00bc\u00bd\u0003\b\u0004\u0000\u00bd"+ + "\u00be\u0005\"\u0000\u0000\u00be\u00cd\u0001\u0000\u0000\u0000\u00bf\u00c0"+ + "\u0003\b\u0004\u0000\u00c0\u00c1\u0005\"\u0000\u0000\u00c1\u00c2\u0005"+ + "\u001c\u0000\u0000\u00c2\u00c9\u0005\u001d\u0000\u0000\u00c3\u00c4\u0005"+ + "\u001c\u0000\u0000\u00c4\u00c5\u0003\"\u0011\u0000\u00c5\u00c6\u0005\u001d"+ + "\u0000\u0000\u00c6\u00c8\u0001\u0000\u0000\u0000\u00c7\u00c3\u0001\u0000"+ + "\u0000\u0000\u00c8\u00cb\u0001\u0000\u0000\u0000\u00c9\u00c7\u0001\u0000"+ + "\u0000\u0000\u00c9\u00ca\u0001\u0000\u0000\u0000\u00ca\u00cd\u0001\u0000"+ + "\u0000\u0000\u00cb\u00c9\u0001\u0000\u0000\u0000\u00cc\u00bc\u0001\u0000"+ + "\u0000\u0000\u00cc\u00bf\u0001\u0000\u0000\u0000\u00cd\u001b\u0001\u0000"+ + "\u0000\u0000\u00ce\u00d2\u0005\u001e\u0000\u0000\u00cf\u00d1\u0003\u001e"+ + "\u000f\u0000\u00d0\u00cf\u0001\u0000\u0000\u0000\u00d1\u00d4\u0001\u0000"+ + "\u0000\u0000\u00d2\u00d0\u0001\u0000\u0000\u0000\u00d2\u00d3\u0001\u0000"+ + "\u0000\u0000\u00d3\u00d5\u0001\u0000\u0000\u0000\u00d4\u00d2\u0001\u0000"+ + "\u0000\u0000\u00d5\u00d6\u0005\u001f\u0000\u0000\u00d6\u001d\u0001\u0000"+ + "\u0000\u0000\u00d7\u00da\u0003\u0004\u0002\u0000\u00d8\u00da\u0003 \u0010"+ + "\u0000\u00d9\u00d7\u0001\u0000\u0000\u0000\u00d9\u00d8\u0001\u0000\u0000"+ + "\u0000\u00da\u001f\u0001\u0000\u0000\u0000\u00db\u00dc\u0003&\u0013\u0000"+ + "\u00dc\u00dd\u0005\u0010\u0000\u0000\u00dd\u00de\u0003\"\u0011\u0000\u00de"+ + "\u00df\u0005!\u0000\u0000\u00df\u00fe\u0001\u0000\u0000\u0000\u00e0\u00e2"+ + "\u0003\"\u0011\u0000\u00e1\u00e0\u0001\u0000\u0000\u0000\u00e1\u00e2\u0001"+ + "\u0000\u0000\u0000\u00e2\u00e3\u0001\u0000\u0000\u0000\u00e3\u00fe\u0005"+ + "!\u0000\u0000\u00e4\u00fe\u0003\u001c\u000e\u0000\u00e5\u00e6\u0005\u0005"+ + "\u0000\u0000\u00e6\u00e7\u0005\u001a\u0000\u0000\u00e7\u00e8\u0003$\u0012"+ + "\u0000\u00e8\u00e9\u0005\u001b\u0000\u0000\u00e9\u00ec\u0003 \u0010\u0000"+ + "\u00ea\u00eb\u0005\u0006\u0000\u0000\u00eb\u00ed\u0003 \u0010\u0000\u00ec"+ + "\u00ea\u0001\u0000\u0000\u0000\u00ec\u00ed\u0001\u0000\u0000\u0000\u00ed"+ + "\u00fe\u0001\u0000\u0000\u0000\u00ee\u00ef\u0005\u0007\u0000\u0000\u00ef"+ + "\u00f0\u0005\u001a\u0000\u0000\u00f0\u00f1\u0003$\u0012\u0000\u00f1\u00f2"+ + "\u0005\u001b\u0000\u0000\u00f2\u00f3\u0003 \u0010\u0000\u00f3\u00fe\u0001"+ + "\u0000\u0000\u0000\u00f4\u00f5\u0005\b\u0000\u0000\u00f5\u00fe\u0005!"+ + "\u0000\u0000\u00f6\u00f7\u0005\t\u0000\u0000\u00f7\u00fe\u0005!\u0000"+ + "\u0000\u00f8\u00fa\u0005\n\u0000\u0000\u00f9\u00fb\u0003\"\u0011\u0000"+ + "\u00fa\u00f9\u0001\u0000\u0000\u0000\u00fa\u00fb\u0001\u0000\u0000\u0000"+ + "\u00fb\u00fc\u0001\u0000\u0000\u0000\u00fc\u00fe\u0005!\u0000\u0000\u00fd"+ + "\u00db\u0001\u0000\u0000\u0000\u00fd\u00e1\u0001\u0000\u0000\u0000\u00fd"+ + "\u00e4\u0001\u0000\u0000\u0000\u00fd\u00e5\u0001\u0000\u0000\u0000\u00fd"+ + "\u00ee\u0001\u0000\u0000\u0000\u00fd\u00f4\u0001\u0000\u0000\u0000\u00fd"+ + "\u00f6\u0001\u0000\u0000\u0000\u00fd\u00f8\u0001\u0000\u0000\u0000\u00fe"+ + "!\u0001\u0000\u0000\u0000\u00ff\u0100\u00034\u001a\u0000\u0100#\u0001"+ + "\u0000\u0000\u0000\u0101\u0102\u0003<\u001e\u0000\u0102%\u0001\u0000\u0000"+ + "\u0000\u0103\u010a\u0005\"\u0000\u0000\u0104\u0105\u0005\u001c\u0000\u0000"+ + "\u0105\u0106\u0003\"\u0011\u0000\u0106\u0107\u0005\u001d\u0000\u0000\u0107"+ + "\u0109\u0001\u0000\u0000\u0000\u0108\u0104\u0001\u0000\u0000\u0000\u0109"+ + "\u010c\u0001\u0000\u0000\u0000\u010a\u0108\u0001\u0000\u0000\u0000\u010a"+ + "\u010b\u0001\u0000\u0000\u0000\u010b\'\u0001\u0000\u0000\u0000\u010c\u010a"+ + "\u0001\u0000\u0000\u0000\u010d\u010e\u0005\u001a\u0000\u0000\u010e\u010f"+ + "\u0003\"\u0011\u0000\u010f\u0110\u0005\u001b\u0000\u0000\u0110\u0114\u0001"+ + "\u0000\u0000\u0000\u0111\u0114\u0003&\u0013\u0000\u0112\u0114\u0003*\u0015"+ + "\u0000\u0113\u010d\u0001\u0000\u0000\u0000\u0113\u0111\u0001\u0000\u0000"+ + "\u0000\u0113\u0112\u0001\u0000\u0000\u0000\u0114)\u0001\u0000\u0000\u0000"+ + "\u0115\u0116\u0007\u0002\u0000\u0000\u0116+\u0001\u0000\u0000\u0000\u0117"+ + "\u0122\u0003(\u0014\u0000\u0118\u0119\u0005\"\u0000\u0000\u0119\u011b"+ + "\u0005\u001a\u0000\u0000\u011a\u011c\u00030\u0018\u0000\u011b\u011a\u0001"+ + "\u0000\u0000\u0000\u011b\u011c\u0001\u0000\u0000\u0000\u011c\u011d\u0001"+ + "\u0000\u0000\u0000\u011d\u0122\u0005\u001b\u0000\u0000\u011e\u011f\u0003"+ + ".\u0017\u0000\u011f\u0120\u0003,\u0016\u0000\u0120\u0122\u0001\u0000\u0000"+ + "\u0000\u0121\u0117\u0001\u0000\u0000\u0000\u0121\u0118\u0001\u0000\u0000"+ + "\u0000\u0121\u011e\u0001\u0000\u0000\u0000\u0122-\u0001\u0000\u0000\u0000"+ + "\u0123\u0124\u0007\u0003\u0000\u0000\u0124/\u0001\u0000\u0000\u0000\u0125"+ + "\u012a\u0003\"\u0011\u0000\u0126\u0127\u0005 \u0000\u0000\u0127\u0129"+ + "\u0003\"\u0011\u0000\u0128\u0126\u0001\u0000\u0000\u0000\u0129\u012c\u0001"+ + "\u0000\u0000\u0000\u012a\u0128\u0001\u0000\u0000\u0000\u012a\u012b\u0001"+ + "\u0000\u0000\u0000\u012b1\u0001\u0000\u0000\u0000\u012c\u012a\u0001\u0000"+ + "\u0000\u0000\u012d\u012e\u0006\u0019\uffff\uffff\u0000\u012e\u012f\u0003"+ + ",\u0016\u0000\u012f\u0135\u0001\u0000\u0000\u0000\u0130\u0131\n\u0001"+ + "\u0000\u0000\u0131\u0132\u0007\u0004\u0000\u0000\u0132\u0134\u0003,\u0016"+ + "\u0000\u0133\u0130\u0001\u0000\u0000\u0000\u0134\u0137\u0001\u0000\u0000"+ + "\u0000\u0135\u0133\u0001\u0000\u0000\u0000\u0135\u0136\u0001\u0000\u0000"+ + "\u0000\u01363\u0001\u0000\u0000\u0000\u0137\u0135\u0001\u0000\u0000\u0000"+ + "\u0138\u0139\u0006\u001a\uffff\uffff\u0000\u0139\u013a\u00032\u0019\u0000"+ + "\u013a\u0140\u0001\u0000\u0000\u0000\u013b\u013c\n\u0001\u0000\u0000\u013c"+ + "\u013d\u0007\u0005\u0000\u0000\u013d\u013f\u00032\u0019\u0000\u013e\u013b"+ + "\u0001\u0000\u0000\u0000\u013f\u0142\u0001\u0000\u0000\u0000\u0140\u013e"+ + "\u0001\u0000\u0000\u0000\u0140\u0141\u0001\u0000\u0000\u0000\u01415\u0001"+ + "\u0000\u0000\u0000\u0142\u0140\u0001\u0000\u0000\u0000\u0143\u0144\u0006"+ + "\u001b\uffff\uffff\u0000\u0144\u0145\u00034\u001a\u0000\u0145\u014b\u0001"+ + "\u0000\u0000\u0000\u0146\u0147\n\u0001\u0000\u0000\u0147\u0148\u0007\u0006"+ + "\u0000\u0000\u0148\u014a\u00034\u001a\u0000\u0149\u0146\u0001\u0000\u0000"+ + "\u0000\u014a\u014d\u0001\u0000\u0000\u0000\u014b\u0149\u0001\u0000\u0000"+ + "\u0000\u014b\u014c\u0001\u0000\u0000\u0000\u014c7\u0001\u0000\u0000\u0000"+ + "\u014d\u014b\u0001\u0000\u0000\u0000\u014e\u014f\u0006\u001c\uffff\uffff"+ + "\u0000\u014f\u0150\u00036\u001b\u0000\u0150\u0156\u0001\u0000\u0000\u0000"+ + "\u0151\u0152\n\u0001\u0000\u0000\u0152\u0153\u0007\u0007\u0000\u0000\u0153"+ + "\u0155\u00036\u001b\u0000\u0154\u0151\u0001\u0000\u0000\u0000\u0155\u0158"+ + "\u0001\u0000\u0000\u0000\u0156\u0154\u0001\u0000\u0000\u0000\u0156\u0157"+ + "\u0001\u0000\u0000\u0000\u01579\u0001\u0000\u0000\u0000\u0158\u0156\u0001"+ + "\u0000\u0000\u0000\u0159\u015a\u0006\u001d\uffff\uffff\u0000\u015a\u015b"+ + "\u00038\u001c\u0000\u015b\u0161\u0001\u0000\u0000\u0000\u015c\u015d\n"+ + "\u0001\u0000\u0000\u015d\u015e\u0005\u0018\u0000\u0000\u015e\u0160\u0003"+ + "8\u001c\u0000\u015f\u015c\u0001\u0000\u0000\u0000\u0160\u0163\u0001\u0000"+ + "\u0000\u0000\u0161\u015f\u0001\u0000\u0000\u0000\u0161\u0162\u0001\u0000"+ + "\u0000\u0000\u0162;\u0001\u0000\u0000\u0000\u0163\u0161\u0001\u0000\u0000"+ + "\u0000\u0164\u0165\u0006\u001e\uffff\uffff\u0000\u0165\u0166\u0003:\u001d"+ + "\u0000\u0166\u016c\u0001\u0000\u0000\u0000\u0167\u0168\n\u0001\u0000\u0000"+ + "\u0168\u0169\u0005\u0019\u0000\u0000\u0169\u016b\u0003:\u001d\u0000\u016a"+ + "\u0167\u0001\u0000\u0000\u0000\u016b\u016e\u0001\u0000\u0000\u0000\u016c"+ + "\u016a\u0001\u0000\u0000\u0000\u016c\u016d\u0001\u0000\u0000\u0000\u016d"+ + "=\u0001\u0000\u0000\u0000\u016e\u016c\u0001\u0000\u0000\u0000\u016f\u0170"+ + "\u00034\u001a\u0000\u0170?\u0001\u0000\u0000\u0000$EGKTboru}\u0089\u0093"+ + "\u0098\u00a1\u00a4\u00a7\u00ad\u00b9\u00c9\u00cc\u00d2\u00d9\u00e1\u00ec"+ + "\u00fa\u00fd\u010a\u0113\u011b\u0121\u012a\u0135\u0140\u014b\u0156\u0161"+ + "\u016c"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/src/antlr4/SysY.g4 b/src/antlr4/SysY.g4 index 37afd7e..aeb250f 100644 --- a/src/antlr4/SysY.g4 +++ b/src/antlr4/SysY.g4 @@ -1,8 +1,10 @@ grammar SysY; -// ===================================== 语法规则(Parser Rules) ===================================== +////Grammer -compUnit: (decl | funcDef)+ EOF; +module: compUnit EOF; + +compUnit: (decl | funcDef)+; decl: constDecl | varDecl; @@ -39,14 +41,14 @@ block: LBRACE blockItem* RBRACE; blockItem: decl | stmt; stmt: - lVal ASSIGN exp SEMI # assignStmt - | exp? SEMI # expStmt - | block # blockStmt - | IF LPAREN cond RPAREN stmt (ELSE stmt)? # ifStmt - | WHILE LPAREN cond RPAREN stmt # whileStmt - | BREAK SEMI # breakStmt - | CONTINUE SEMI # continueStmt - | RETURN exp? SEMI # returnStmt; + lVal ASSIGN exp SEMI + | exp? SEMI + | block + | IF LPAREN cond RPAREN stmt (ELSE stmt)? + | WHILE LPAREN cond RPAREN stmt + | BREAK SEMI + | CONTINUE SEMI + | RETURN exp? SEMI; exp: addExp; @@ -59,39 +61,38 @@ primaryExp: LPAREN exp RPAREN | lVal | number; number: IntConst | FloatConst; unaryExp: - primaryExp # primaryUnaryExp - | Ident LPAREN funcRParams? RPAREN # callUnaryExp - | unaryOp unaryExp # opUnaryExp; + primaryExp + | Ident LPAREN funcRParams? RPAREN + | unaryOp unaryExp; unaryOp: ADD | SUB | NOT; funcRParams: exp (COMMA exp)*; mulExp: - unaryExp # unaryMulExp - | mulExp op = (MUL | DIV | MOD) unaryExp # binaryMulExp; + unaryExp + | mulExp op = (MUL | DIV | MOD) unaryExp; addExp: - mulExp # mulAddExp - | addExp op = (ADD | SUB) mulExp # binaryAddExp; + mulExp + | addExp op = (ADD | SUB) mulExp; relExp: - addExp # addRelExp - | relExp op = (LT | GT | LE | GE) addExp # binaryRelExp; + addExp + | relExp op = (LT | GT | LE | GE) addExp; eqExp: - relExp # relEqExp - | eqExp op = (EQ | NE) relExp # binaryEqExp; + relExp + | eqExp op = (EQ | NE) relExp; -lAndExp: eqExp # eqLAndExp | lAndExp AND eqExp # binaryLAndExp; +lAndExp: eqExp | lAndExp AND eqExp ; -lOrExp: lAndExp # andLOrExp | lOrExp OR lAndExp # binaryLOrExp; +lOrExp: lAndExp | lOrExp OR lAndExp ; constExp: addExp; -// ===================================== 词法规则(Lexer Rules) ===================================== - -// ---------- 关键字 ---------- +////Lexer +//keywords CONST: 'const'; INT: 'int'; FLOAT: 'float'; @@ -103,27 +104,24 @@ BREAK: 'break'; CONTINUE: 'continue'; RETURN: 'return'; -// ---------- 运算符 ---------- +//operators ADD: '+'; SUB: '-'; MUL: '*'; DIV: '/'; MOD: '%'; - ASSIGN: '='; - EQ: '=='; NE: '!='; LT: '<'; LE: '<='; GT: '>'; GE: '>='; - NOT: '!'; AND: '&&'; OR: '||'; -// ---------- 界符 ---------- +//括号 LPAREN: '('; RPAREN: ')'; LBRACK: '['; @@ -133,67 +131,48 @@ RBRACE: '}'; COMMA: ','; SEMI: ';'; -// ---------- 标识符 ---------- 与文档中的 Ident 对应 +//标识符 Ident: [a-zA-Z_] [a-zA-Z_0-9]*; -// ===================================== 数值常量相关片段规则 ===================================== - +//数字常量片段 // 十进制数字 fragment Digit: [0-9]; - // 非零十进制数字 fragment NonzeroDigit: [1-9]; - // 八进制数字 fragment OctDigit: [0-7]; - // 十六进制数字 fragment HexDigit: [0-9a-fA-F]; - // 十进制整数:非零开头,后接若干十进制数字 fragment DecInteger: NonzeroDigit Digit*; - // 八进制整数:以 0 开头 fragment OctInteger: '0' OctDigit*; - // 十六进制整数:以 0x 或 0X 开头 fragment HexInteger: '0' [xX] HexDigit+; - // 十进制小数部分 fragment DecFraction: Digit+ '.' Digit* | '.' Digit+; - // 十进制指数部分 fragment DecExponent: [eE] [+\-]? Digit+; - // 十进制浮点数 fragment DecFloat: DecFraction DecExponent? | DecInteger DecExponent; - // 十六进制小数部分 fragment HexFraction: HexDigit* '.' HexDigit+ | HexDigit+ '.'; - // 十六进制浮点数的二进制指数部分 fragment BinExponent: [pP] [+\-]? Digit+; - // 十六进制浮点数 fragment HexFloat: '0' [xX] HexFraction BinExponent | HexInteger BinExponent; - -// ---------- 整数字面量 ---------- 与文档中的 IntConst 对应 +//整型常量 IntConst: DecInteger | OctInteger | HexInteger; - -// ---------- 浮点数字面量 ---------- 与文档中的 FloatConst 对应 +//浮点常量 FloatConst: DecFloat | HexFloat; -// ===================================== 空白符与注释 ===================================== - -// 空白字符直接跳过 +//空白符规则 WS: [ \t\r\n]+ -> skip; - -// 单行注释:从 // 到行末 +// 单行注释 LINE_COMMENT: '//' ~[\r\n]* -> skip; - -// 多行注释:从 /* 到 */ +// 跨行注释 BLOCK_COMMENT: '/*' .*? '*/' -> skip; \ No newline at end of file