You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

779 lines
40 KiB

compUnit
|-- decl
| `-- varDecl
| |-- bType
| | `-- INT: int
| |-- varDef
| | |-- Ident: COUNT
| | |-- ASSIGN: =
| | `-- initVal
| | `-- exp
| | `-- addExp
| | `-- mulExp
| | `-- unaryExp
| | `-- primaryExp
| | `-- number
| | `-- IntConst: 500000
| `-- SEMI: ;
|-- funcDef
| |-- funcType
| | `-- FLOAT: float
| |-- Ident: loop
| |-- LPAREN: (
| |-- funcFParams
| | |-- funcFParam
| | | |-- bType
| | | | `-- FLOAT: float
| | | |-- Ident: x
| | | |-- LBRACK: [
| | | `-- RBRACK: ]
| | |-- COMMA: ,
| | |-- funcFParam
| | | |-- bType
| | | | `-- FLOAT: float
| | | |-- Ident: y
| | | |-- LBRACK: [
| | | `-- RBRACK: ]
| | |-- COMMA: ,
| | `-- funcFParam
| | |-- bType
| | | `-- INT: int
| | `-- Ident: length
| |-- RPAREN: )
| `-- block
| |-- LBRACE: {
| |-- blockItem
| | `-- decl
| | `-- varDecl
| | |-- bType
| | | `-- INT: int
| | |-- varDef
| | | |-- Ident: i
| | | |-- ASSIGN: =
| | | `-- initVal
| | | `-- exp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- number
| | | `-- IntConst: 0
| | `-- SEMI: ;
| |-- blockItem
| | `-- decl
| | `-- varDecl
| | |-- bType
| | | `-- FLOAT: float
| | |-- varDef
| | | |-- Ident: accumulator
| | | |-- ASSIGN: =
| | | `-- initVal
| | | `-- exp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- number
| | | `-- FloatConst: 0.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: length
| | |-- RPAREN: )
| | `-- stmt
| | `-- block
| | |-- LBRACE: {
| | |-- blockItem
| | | `-- stmt
| | | |-- lVal
| | | | `-- Ident: accumulator
| | | |-- ASSIGN: =
| | | |-- exp
| | | | `-- addExp
| | | | |-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: accumulator
| | | | |-- ADD: +
| | | | `-- mulExp
| | | | |-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | |-- Ident: x
| | | | | |-- LBRACK: [
| | | | | |-- exp
| | | | | | `-- addExp
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: i
| | | | | `-- RBRACK: ]
| | | | |-- MUL: *
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | |-- Ident: y
| | | | |-- LBRACK: [
| | | | |-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: i
| | | | `-- RBRACK: ]
| | | `-- SEMI: ;
| | |-- blockItem
| | | `-- stmt
| | | |-- lVal
| | | | `-- Ident: i
| | | |-- ASSIGN: =
| | | |-- exp
| | | | `-- addExp
| | | | |-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: i
| | | | |-- ADD: +
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 1
| | | `-- SEMI: ;
| | `-- RBRACE: }
| |-- blockItem
| | `-- stmt
| | |-- RETURN: return
| | |-- exp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- lVal
| | | `-- Ident: accumulator
| | `-- SEMI: ;
| `-- RBRACE: }
`-- funcDef
|-- funcType
| `-- INT: int
|-- Ident: main
|-- LPAREN: (
|-- RPAREN: )
`-- block
|-- LBRACE: {
|-- blockItem
| `-- decl
| `-- varDecl
| |-- bType
| | `-- INT: int
| |-- varDef
| | |-- Ident: i
| | |-- ASSIGN: =
| | `-- initVal
| | `-- exp
| | `-- addExp
| | `-- mulExp
| | `-- unaryExp
| | `-- primaryExp
| | `-- number
| | `-- IntConst: 0
| |-- COMMA: ,
| |-- varDef
| | |-- Ident: j
| | |-- ASSIGN: =
| | `-- initVal
| | `-- exp
| | `-- addExp
| | `-- mulExp
| | `-- unaryExp
| | `-- primaryExp
| | `-- number
| | `-- IntConst: 0
| `-- SEMI: ;
|-- blockItem
| `-- decl
| `-- varDecl
| |-- bType
| | `-- INT: int
| |-- varDef
| | |-- Ident: len
| | |-- ASSIGN: =
| | `-- initVal
| | `-- exp
| | `-- addExp
| | `-- mulExp
| | `-- unaryExp
| | |-- Ident: getint
| | |-- LPAREN: (
| | `-- RPAREN: )
| `-- SEMI: ;
|-- blockItem
| `-- decl
| `-- varDecl
| |-- bType
| | `-- FLOAT: float
| |-- varDef
| | |-- Ident: x
| | |-- LBRACK: [
| | |-- constExp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- number
| | | `-- IntConst: 4096
| | `-- RBRACK: ]
| `-- SEMI: ;
|-- blockItem
| `-- decl
| `-- varDecl
| |-- bType
| | `-- FLOAT: float
| |-- varDef
| | |-- Ident: y
| | |-- LBRACK: [
| | |-- constExp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- number
| | | `-- IntConst: 4096
| | `-- RBRACK: ]
| `-- SEMI: ;
|-- blockItem
| `-- decl
| `-- varDecl
| |-- bType
| | `-- FLOAT: float
| |-- varDef
| | |-- Ident: total
| | |-- ASSIGN: =
| | `-- initVal
| | `-- exp
| | `-- addExp
| | `-- mulExp
| | `-- unaryExp
| | `-- primaryExp
| | `-- number
| | `-- FloatConst: 0.0
| `-- SEMI: ;
|-- blockItem
| `-- decl
| `-- varDecl
| |-- bType
| | `-- FLOAT: float
| |-- varDef
| | |-- Ident: a
| | |-- ASSIGN: =
| | `-- initVal
| | `-- exp
| | `-- addExp
| | `-- mulExp
| | `-- unaryExp
| | `-- primaryExp
| | `-- number
| | `-- FloatConst: 0.0
| `-- SEMI: ;
|-- blockItem
| `-- decl
| `-- varDecl
| |-- bType
| | `-- FLOAT: float
| |-- varDef
| | |-- Ident: b
| | |-- ASSIGN: =
| | `-- initVal
| | `-- exp
| | `-- addExp
| | `-- mulExp
| | `-- unaryExp
| | `-- primaryExp
| | `-- number
| | `-- FloatConst: 1.0
| `-- SEMI: ;
|-- blockItem
| `-- stmt
| |-- exp
| | `-- addExp
| | `-- mulExp
| | `-- unaryExp
| | |-- Ident: starttime
| | |-- LPAREN: (
| | `-- RPAREN: )
| `-- SEMI: ;
|-- blockItem
| `-- stmt
| |-- WHILE: while
| |-- LPAREN: (
| |-- cond
| | `-- lOrExp
| | `-- lAndExp
| | `-- eqExp
| | `-- relExp
| | |-- relExp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- lVal
| | | `-- Ident: i
| | |-- LT: <
| | `-- addExp
| | `-- mulExp
| | `-- unaryExp
| | `-- primaryExp
| | `-- lVal
| | `-- Ident: COUNT
| |-- RPAREN: )
| `-- stmt
| `-- block
| |-- LBRACE: {
| |-- blockItem
| | `-- stmt
| | |-- IF: if
| | |-- LPAREN: (
| | |-- cond
| | | `-- lOrExp
| | | `-- lAndExp
| | | `-- eqExp
| | | `-- relExp
| | | `-- addExp
| | | `-- mulExp
| | | |-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | `-- Ident: i
| | | |-- MOD: %
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- number
| | | `-- IntConst: 10
| | |-- RPAREN: )
| | |-- stmt
| | | `-- block
| | | |-- LBRACE: {
| | | |-- blockItem
| | | | `-- stmt
| | | | |-- lVal
| | | | | `-- Ident: a
| | | | |-- ASSIGN: =
| | | | |-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- FloatConst: 0.0
| | | | `-- SEMI: ;
| | | |-- blockItem
| | | | `-- stmt
| | | | |-- lVal
| | | | | `-- Ident: b
| | | | |-- ASSIGN: =
| | | | |-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- FloatConst: 1.0
| | | | `-- SEMI: ;
| | | `-- RBRACE: }
| | |-- ELSE: else
| | `-- stmt
| | `-- block
| | |-- LBRACE: {
| | |-- blockItem
| | | `-- stmt
| | | |-- lVal
| | | | `-- Ident: a
| | | |-- ASSIGN: =
| | | |-- exp
| | | | `-- addExp
| | | | |-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: a
| | | | |-- ADD: +
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- FloatConst: 0.1
| | | `-- SEMI: ;
| | |-- blockItem
| | | `-- stmt
| | | |-- lVal
| | | | `-- Ident: b
| | | |-- ASSIGN: =
| | | |-- exp
| | | | `-- addExp
| | | | |-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: b
| | | | |-- ADD: +
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- FloatConst: 0.2
| | | `-- SEMI: ;
| | `-- RBRACE: }
| |-- blockItem
| | `-- stmt
| | |-- WHILE: while
| | |-- LPAREN: (
| | |-- cond
| | | `-- lOrExp
| | | `-- lAndExp
| | | `-- eqExp
| | | `-- relExp
| | | |-- relExp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | `-- Ident: j
| | | |-- LT: <
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- lVal
| | | `-- Ident: len
| | |-- RPAREN: )
| | `-- stmt
| | `-- block
| | |-- LBRACE: {
| | |-- blockItem
| | | `-- stmt
| | | |-- lVal
| | | | |-- Ident: x
| | | | |-- LBRACK: [
| | | | |-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: j
| | | | `-- RBRACK: ]
| | | |-- ASSIGN: =
| | | |-- exp
| | | | `-- addExp
| | | | |-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: a
| | | | |-- ADD: +
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | `-- Ident: j
| | | `-- SEMI: ;
| | |-- blockItem
| | | `-- stmt
| | | |-- lVal
| | | | |-- Ident: y
| | | | |-- LBRACK: [
| | | | |-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: j
| | | | `-- RBRACK: ]
| | | |-- ASSIGN: =
| | | |-- exp
| | | | `-- addExp
| | | | |-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: b
| | | | |-- ADD: +
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | `-- Ident: j
| | | `-- SEMI: ;
| | |-- blockItem
| | | `-- stmt
| | | |-- lVal
| | | | `-- Ident: j
| | | |-- ASSIGN: =
| | | |-- exp
| | | | `-- addExp
| | | | |-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: j
| | | | |-- ADD: +
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 1
| | | `-- SEMI: ;
| | `-- RBRACE: }
| |-- blockItem
| | `-- stmt
| | |-- lVal
| | | `-- Ident: total
| | |-- ASSIGN: =
| | |-- exp
| | | `-- addExp
| | | |-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | `-- Ident: total
| | | |-- ADD: +
| | | `-- mulExp
| | | `-- unaryExp
| | | |-- Ident: loop
| | | |-- LPAREN: (
| | | |-- funcRParams
| | | | |-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: x
| | | | |-- COMMA: ,
| | | | |-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: y
| | | | |-- COMMA: ,
| | | | `-- exp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | `-- Ident: len
| | | `-- RPAREN: )
| | `-- SEMI: ;
| |-- blockItem
| | `-- stmt
| | |-- lVal
| | | `-- Ident: i
| | |-- ASSIGN: =
| | |-- exp
| | | `-- addExp
| | | |-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | `-- Ident: i
| | | |-- ADD: +
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- number
| | | `-- IntConst: 1
| | `-- SEMI: ;
| `-- RBRACE: }
|-- blockItem
| `-- stmt
| |-- exp
| | `-- addExp
| | `-- mulExp
| | `-- unaryExp
| | |-- Ident: stoptime
| | |-- LPAREN: (
| | `-- RPAREN: )
| `-- SEMI: ;
|-- blockItem
| `-- stmt
| |-- IF: if
| |-- LPAREN: (
| |-- cond
| | `-- lOrExp
| | |-- lOrExp
| | | `-- lAndExp
| | | `-- eqExp
| | | `-- relExp
| | | |-- relExp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | |-- LPAREN: (
| | | | |-- exp
| | | | | `-- addExp
| | | | | |-- addExp
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: total
| | | | | |-- SUB: -
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- FloatConst: 11442437121638400.000000
| | | | `-- RPAREN: )
| | | |-- LE: <=
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- number
| | | `-- FloatConst: 0.000001
| | |-- OR: ||
| | `-- lAndExp
| | `-- eqExp
| | `-- relExp
| | |-- relExp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | |-- LPAREN: (
| | | |-- exp
| | | | `-- addExp
| | | | |-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: total
| | | | |-- SUB: -
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- FloatConst: 11442437121638400.000000
| | | `-- RPAREN: )
| | |-- GE: >=
| | `-- addExp
| | `-- mulExp
| | `-- unaryExp
| | |-- unaryOp
| | | `-- SUB: -
| | `-- unaryExp
| | `-- primaryExp
| | `-- number
| | `-- FloatConst: 0.000001
| |-- RPAREN: )
| |-- stmt
| | `-- block
| | |-- LBRACE: {
| | |-- blockItem
| | | `-- stmt
| | | |-- exp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | |-- Ident: putint
| | | | |-- LPAREN: (
| | | | |-- funcRParams
| | | | | `-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- IntConst: 0
| | | | `-- RPAREN: )
| | | `-- SEMI: ;
| | |-- blockItem
| | | `-- stmt
| | | |-- RETURN: return
| | | |-- exp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 0
| | | `-- SEMI: ;
| | `-- RBRACE: }
| |-- ELSE: else
| `-- stmt
| `-- block
| |-- LBRACE: {
| |-- blockItem
| | `-- stmt
| | |-- exp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | |-- Ident: putint
| | | |-- LPAREN: (
| | | |-- funcRParams
| | | | `-- exp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 1
| | | `-- RPAREN: )
| | `-- SEMI: ;
| |-- blockItem
| | `-- stmt
| | |-- RETURN: return
| | |-- exp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- number
| | | `-- IntConst: 1
| | `-- SEMI: ;
| `-- RBRACE: }
`-- RBRACE: }