加入module

the-little-apprentice 2 weeks ago
parent e4fed12b92
commit 29d1315410

File diff suppressed because it is too large Load Diff

@ -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: <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: }

@ -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: <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: }

File diff suppressed because it is too large Load Diff

@ -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: <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: }

@ -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: <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: }

@ -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: <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: }

@ -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: <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: }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -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: <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: }

@ -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: <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: }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -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: <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: }

@ -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: <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: }

File diff suppressed because it is too large Load Diff

@ -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: <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: }

@ -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: <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: }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -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 2CMake 完整构建(不启用 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 ]]

File diff suppressed because it is too large Load Diff

@ -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;
Loading…
Cancel
Save