master
zhanhaoming 3 weeks ago
parent be143f5326
commit c400afaffe

@ -0,0 +1,170 @@
<!DOCTYPE html>
<html>
<head>
<title>语法树生成报告</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
h1 { color: #333; }
.summary { background: #f0f0f0; padding: 10px; border-radius: 5px; }
.success { color: green; }
.failure { color: red; }
.skipped { color: orange; }
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #4CAF50; color: white; }
tr:nth-child(even) { background-color: #f2f2f2; }
.file-link { text-decoration: none; color: #0066cc; }
.file-link:hover { text-decoration: underline; }
</style>
</head>
<body>
<h1>SysY语法树生成报告</h1>
<div class="summary">
<h2>统计信息</h2>
<p>生成时间: Thu Mar 19 19:32:48 CST 2026</p>
<p>测试目录: ./test</p>
<p>输出目录: ./lab1_results</p>
<p>总计: 21</p>
<p>成功: <span class="success">21</span></p>
<p>失败: <span class="failure">0</span></p>
<p>跳过: <span class="skipped">0</span></p>
<p>成功率: 100%</p>
</div>
<h2>详细结果</h2>
<table>
<tr>
<th>文件</th>
<th>状态</th>
<th>输出文件</th>
<th>错误信息</th>
</tr>
<tr>
<td>test_case/performance/02_mv3.sy</td>
<td class="success">成功</td>
<td><a href="test_case/performance/02_mv3.tree" class="file-link">02_mv3.tree</a></td>
<td>-</td>
</tr>
<tr>
<td>test_case/performance/03_sort1.sy</td>
<td class="success">成功</td>
<td><a href="test_case/performance/03_sort1.tree" class="file-link">03_sort1.tree</a></td>
<td>-</td>
</tr>
<tr>
<td>test_case/performance/if-combine3.sy</td>
<td class="success">成功</td>
<td><a href="test_case/performance/if-combine3.tree" class="file-link">if-combine3.tree</a></td>
<td>-</td>
</tr>
<tr>
<td>test_case/performance/01_mm2.sy</td>
<td class="success">成功</td>
<td><a href="test_case/performance/01_mm2.tree" class="file-link">01_mm2.tree</a></td>
<td>-</td>
</tr>
<tr>
<td>test_case/performance/vector_mul3.sy</td>
<td class="success">成功</td>
<td><a href="test_case/performance/vector_mul3.tree" class="file-link">vector_mul3.tree</a></td>
<td>-</td>
</tr>
<tr>
<td>test_case/performance/large_loop_array_2.sy</td>
<td class="success">成功</td>
<td><a href="test_case/performance/large_loop_array_2.tree" class="file-link">large_loop_array_2.tree</a></td>
<td>-</td>
</tr>
<tr>
<td>test_case/performance/2025-MYO-20.sy</td>
<td class="success">成功</td>
<td><a href="test_case/performance/2025-MYO-20.tree" class="file-link">2025-MYO-20.tree</a></td>
<td>-</td>
</tr>
<tr>
<td>test_case/performance/gameoflife-oscillator.sy</td>
<td class="success">成功</td>
<td><a href="test_case/performance/gameoflife-oscillator.tree" class="file-link">gameoflife-oscillator.tree</a></td>
<td>-</td>
</tr>
<tr>
<td>test_case/performance/fft0.sy</td>
<td class="success">成功</td>
<td><a href="test_case/performance/fft0.tree" class="file-link">fft0.tree</a></td>
<td>-</td>
</tr>
<tr>
<td>test_case/performance/transpose0.sy</td>
<td class="success">成功</td>
<td><a href="test_case/performance/transpose0.tree" class="file-link">transpose0.tree</a></td>
<td>-</td>
</tr>
<tr>
<td>test_case/functional/05_arr_defn4.sy</td>
<td class="success">成功</td>
<td><a href="test_case/functional/05_arr_defn4.tree" class="file-link">05_arr_defn4.tree</a></td>
<td>-</td>
</tr>
<tr>
<td>test_case/functional/15_graph_coloring.sy</td>
<td class="success">成功</td>
<td><a href="test_case/functional/15_graph_coloring.tree" class="file-link">15_graph_coloring.tree</a></td>
<td>-</td>
</tr>
<tr>
<td>test_case/functional/29_break.sy</td>
<td class="success">成功</td>
<td><a href="test_case/functional/29_break.tree" class="file-link">29_break.tree</a></td>
<td>-</td>
</tr>
<tr>
<td>test_case/functional/simple_add.sy</td>
<td class="success">成功</td>
<td><a href="test_case/functional/simple_add.tree" class="file-link">simple_add.tree</a></td>
<td>-</td>
</tr>
<tr>
<td>test_case/functional/95_float.sy</td>
<td class="success">成功</td>
<td><a href="test_case/functional/95_float.tree" class="file-link">95_float.tree</a></td>
<td>-</td>
</tr>
<tr>
<td>test_case/functional/13_sub2.sy</td>
<td class="success">成功</td>
<td><a href="test_case/functional/13_sub2.tree" class="file-link">13_sub2.tree</a></td>
<td>-</td>
</tr>
<tr>
<td>test_case/functional/11_add2.sy</td>
<td class="success">成功</td>
<td><a href="test_case/functional/11_add2.tree" class="file-link">11_add2.tree</a></td>
<td>-</td>
</tr>
<tr>
<td>test_case/functional/22_matrix_multiply.sy</td>
<td class="success">成功</td>
<td><a href="test_case/functional/22_matrix_multiply.tree" class="file-link">22_matrix_multiply.tree</a></td>
<td>-</td>
</tr>
<tr>
<td>test_case/functional/25_scope3.sy</td>
<td class="success">成功</td>
<td><a href="test_case/functional/25_scope3.tree" class="file-link">25_scope3.tree</a></td>
<td>-</td>
</tr>
<tr>
<td>test_case/functional/09_func_defn.sy</td>
<td class="success">成功</td>
<td><a href="test_case/functional/09_func_defn.tree" class="file-link">09_func_defn.tree</a></td>
<td>-</td>
</tr>
<tr>
<td>test_case/functional/36_op_priority2.sy</td>
<td class="success">成功</td>
<td><a href="test_case/functional/36_op_priority2.tree" class="file-link">36_op_priority2.tree</a></td>
<td>-</td>
</tr>
</table>
</body>
</html>

@ -0,0 +1,651 @@
compUnit
|-- funcDef
| |-- funcType
| | `-- Int: int
| |-- Ident: main
| |-- L_PAREN: (
| |-- R_PAREN: )
| `-- block
| |-- L_BRACE: {
| |-- blockItem
| | `-- decl
| | `-- constDecl
| | |-- Const: const
| | |-- bType
| | | `-- Int: int
| | |-- constDef
| | | |-- Ident: a
| | | |-- L_BRACKET: [
| | | |-- constExp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 4
| | | |-- R_BRACKET: ]
| | | |-- L_BRACKET: [
| | | |-- constExp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 2
| | | |-- R_BRACKET: ]
| | | |-- Assign: =
| | | `-- constInitVal
| | | |-- L_BRACE: {
| | | |-- constInitVal
| | | | |-- L_BRACE: {
| | | | |-- constInitVal
| | | | | `-- constExp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- IntConst: 1
| | | | |-- Comma: ,
| | | | |-- constInitVal
| | | | | `-- constExp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- IntConst: 2
| | | | `-- R_BRACE: }
| | | |-- Comma: ,
| | | |-- constInitVal
| | | | |-- L_BRACE: {
| | | | |-- constInitVal
| | | | | `-- constExp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- IntConst: 3
| | | | |-- Comma: ,
| | | | |-- constInitVal
| | | | | `-- constExp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- IntConst: 4
| | | | `-- R_BRACE: }
| | | |-- Comma: ,
| | | |-- constInitVal
| | | | |-- L_BRACE: {
| | | | `-- R_BRACE: }
| | | |-- Comma: ,
| | | |-- constInitVal
| | | | `-- constExp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 7
| | | `-- R_BRACE: }
| | `-- Semi: ;
| |-- blockItem
| | `-- decl
| | `-- constDecl
| | |-- Const: const
| | |-- bType
| | | `-- Int: int
| | |-- constDef
| | | |-- Ident: N
| | | |-- Assign: =
| | | `-- constInitVal
| | | `-- constExp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- number
| | | `-- IntConst: 3
| | `-- Semi: ;
| |-- blockItem
| | `-- decl
| | `-- varDecl
| | |-- bType
| | | `-- Int: int
| | |-- varDef
| | | |-- Ident: b
| | | |-- L_BRACKET: [
| | | |-- constExp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 4
| | | |-- R_BRACKET: ]
| | | |-- L_BRACKET: [
| | | |-- constExp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 2
| | | |-- R_BRACKET: ]
| | | |-- Assign: =
| | | `-- initVal
| | | |-- L_BRACE: {
| | | `-- R_BRACE: }
| | `-- Semi: ;
| |-- blockItem
| | `-- decl
| | `-- varDecl
| | |-- bType
| | | `-- Int: int
| | |-- varDef
| | | |-- Ident: c
| | | |-- L_BRACKET: [
| | | |-- constExp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 4
| | | |-- R_BRACKET: ]
| | | |-- L_BRACKET: [
| | | |-- constExp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 2
| | | |-- R_BRACKET: ]
| | | |-- Assign: =
| | | `-- initVal
| | | |-- L_BRACE: {
| | | |-- initVal
| | | | `-- exp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 1
| | | |-- Comma: ,
| | | |-- initVal
| | | | `-- exp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 2
| | | |-- Comma: ,
| | | |-- initVal
| | | | `-- exp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 3
| | | |-- Comma: ,
| | | |-- initVal
| | | | `-- exp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 4
| | | |-- Comma: ,
| | | |-- initVal
| | | | `-- exp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 5
| | | |-- Comma: ,
| | | |-- initVal
| | | | `-- exp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 6
| | | |-- Comma: ,
| | | |-- initVal
| | | | `-- exp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 7
| | | |-- Comma: ,
| | | |-- initVal
| | | | `-- exp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 8
| | | `-- R_BRACE: }
| | `-- Semi: ;
| |-- blockItem
| | `-- decl
| | `-- varDecl
| | |-- bType
| | | `-- Int: int
| | |-- varDef
| | | |-- Ident: d
| | | |-- L_BRACKET: [
| | | |-- constExp
| | | | `-- addExp
| | | | |-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: N
| | | | |-- AddOp: +
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 1
| | | |-- R_BRACKET: ]
| | | |-- L_BRACKET: [
| | | |-- constExp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 2
| | | |-- R_BRACKET: ]
| | | |-- Assign: =
| | | `-- initVal
| | | |-- L_BRACE: {
| | | |-- initVal
| | | | `-- exp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 1
| | | |-- Comma: ,
| | | |-- initVal
| | | | `-- exp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 2
| | | |-- Comma: ,
| | | |-- initVal
| | | | |-- L_BRACE: {
| | | | |-- initVal
| | | | | `-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- IntConst: 3
| | | | `-- R_BRACE: }
| | | |-- Comma: ,
| | | |-- initVal
| | | | |-- L_BRACE: {
| | | | |-- initVal
| | | | | `-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- IntConst: 5
| | | | `-- R_BRACE: }
| | | |-- Comma: ,
| | | |-- initVal
| | | | `-- exp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | |-- Ident: a
| | | | |-- L_BRACKET: [
| | | | |-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- IntConst: 3
| | | | |-- R_BRACKET: ]
| | | | |-- L_BRACKET: [
| | | | |-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- IntConst: 0
| | | | `-- R_BRACKET: ]
| | | |-- Comma: ,
| | | |-- initVal
| | | | `-- exp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 8
| | | `-- R_BRACE: }
| | `-- Semi: ;
| |-- blockItem
| | `-- decl
| | `-- varDecl
| | |-- bType
| | | `-- Int: int
| | |-- varDef
| | | |-- Ident: e
| | | |-- L_BRACKET: [
| | | |-- constExp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 4
| | | |-- R_BRACKET: ]
| | | |-- L_BRACKET: [
| | | |-- constExp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 2
| | | |-- R_BRACKET: ]
| | | |-- L_BRACKET: [
| | | |-- constExp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 1
| | | |-- R_BRACKET: ]
| | | |-- Assign: =
| | | `-- initVal
| | | |-- L_BRACE: {
| | | |-- initVal
| | | | |-- L_BRACE: {
| | | | |-- initVal
| | | | | `-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | |-- Ident: d
| | | | | |-- L_BRACKET: [
| | | | | |-- exp
| | | | | | `-- addExp
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- number
| | | | | | `-- IntConst: 2
| | | | | |-- R_BRACKET: ]
| | | | | |-- L_BRACKET: [
| | | | | |-- exp
| | | | | | `-- addExp
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- number
| | | | | | `-- IntConst: 1
| | | | | `-- R_BRACKET: ]
| | | | |-- Comma: ,
| | | | |-- initVal
| | | | | |-- L_BRACE: {
| | | | | |-- initVal
| | | | | | `-- exp
| | | | | | `-- addExp
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | |-- Ident: c
| | | | | | |-- L_BRACKET: [
| | | | | | |-- exp
| | | | | | | `-- addExp
| | | | | | | `-- mulExp
| | | | | | | `-- unaryExp
| | | | | | | `-- primaryExp
| | | | | | | `-- number
| | | | | | | `-- IntConst: 2
| | | | | | |-- R_BRACKET: ]
| | | | | | |-- L_BRACKET: [
| | | | | | |-- exp
| | | | | | | `-- addExp
| | | | | | | `-- mulExp
| | | | | | | `-- unaryExp
| | | | | | | `-- primaryExp
| | | | | | | `-- number
| | | | | | | `-- IntConst: 1
| | | | | | `-- R_BRACKET: ]
| | | | | `-- R_BRACE: }
| | | | `-- R_BRACE: }
| | | |-- Comma: ,
| | | |-- initVal
| | | | |-- L_BRACE: {
| | | | |-- initVal
| | | | | `-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- IntConst: 3
| | | | |-- Comma: ,
| | | | |-- initVal
| | | | | `-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- IntConst: 4
| | | | `-- R_BRACE: }
| | | |-- Comma: ,
| | | |-- initVal
| | | | |-- L_BRACE: {
| | | | |-- initVal
| | | | | `-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- IntConst: 5
| | | | |-- Comma: ,
| | | | |-- initVal
| | | | | `-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- IntConst: 6
| | | | `-- R_BRACE: }
| | | |-- Comma: ,
| | | |-- initVal
| | | | |-- L_BRACE: {
| | | | |-- initVal
| | | | | `-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- IntConst: 7
| | | | |-- Comma: ,
| | | | |-- initVal
| | | | | `-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- IntConst: 8
| | | | `-- R_BRACE: }
| | | `-- R_BRACE: }
| | `-- Semi: ;
| |-- blockItem
| | `-- stmt
| | |-- Return: return
| | |-- exp
| | | `-- addExp
| | | |-- addExp
| | | | |-- addExp
| | | | | |-- addExp
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | |-- Ident: e
| | | | | | |-- L_BRACKET: [
| | | | | | |-- exp
| | | | | | | `-- addExp
| | | | | | | `-- mulExp
| | | | | | | `-- unaryExp
| | | | | | | `-- primaryExp
| | | | | | | `-- number
| | | | | | | `-- IntConst: 3
| | | | | | |-- R_BRACKET: ]
| | | | | | |-- L_BRACKET: [
| | | | | | |-- exp
| | | | | | | `-- addExp
| | | | | | | `-- mulExp
| | | | | | | `-- unaryExp
| | | | | | | `-- primaryExp
| | | | | | | `-- number
| | | | | | | `-- IntConst: 1
| | | | | | |-- R_BRACKET: ]
| | | | | | |-- L_BRACKET: [
| | | | | | |-- exp
| | | | | | | `-- addExp
| | | | | | | `-- mulExp
| | | | | | | `-- unaryExp
| | | | | | | `-- primaryExp
| | | | | | | `-- number
| | | | | | | `-- IntConst: 0
| | | | | | `-- R_BRACKET: ]
| | | | | |-- AddOp: +
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | |-- Ident: e
| | | | | |-- L_BRACKET: [
| | | | | |-- exp
| | | | | | `-- addExp
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- number
| | | | | | `-- IntConst: 0
| | | | | |-- R_BRACKET: ]
| | | | | |-- L_BRACKET: [
| | | | | |-- exp
| | | | | | `-- addExp
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- number
| | | | | | `-- IntConst: 0
| | | | | |-- R_BRACKET: ]
| | | | | |-- L_BRACKET: [
| | | | | |-- exp
| | | | | | `-- addExp
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- number
| | | | | | `-- IntConst: 0
| | | | | `-- R_BRACKET: ]
| | | | |-- AddOp: +
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | |-- Ident: e
| | | | |-- L_BRACKET: [
| | | | |-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- IntConst: 0
| | | | |-- R_BRACKET: ]
| | | | |-- L_BRACKET: [
| | | | |-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- IntConst: 1
| | | | |-- R_BRACKET: ]
| | | | |-- L_BRACKET: [
| | | | |-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- IntConst: 0
| | | | `-- R_BRACKET: ]
| | | |-- AddOp: +
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- lVal
| | | |-- Ident: d
| | | |-- L_BRACKET: [
| | | |-- exp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 3
| | | |-- R_BRACKET: ]
| | | |-- L_BRACKET: [
| | | |-- exp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 0
| | | `-- R_BRACKET: ]
| | `-- Semi: ;
| `-- R_BRACE: }
`-- EOF: <EOF>

@ -0,0 +1,116 @@
compUnit
|-- decl
| `-- varDecl
| |-- bType
| | `-- Int: int
| |-- varDef
| | `-- Ident: a
| `-- Semi: ;
|-- funcDef
| |-- funcType
| | `-- Int: int
| |-- Ident: func
| |-- L_PAREN: (
| |-- funcFParams
| | `-- funcFParam
| | |-- bType
| | | `-- Int: int
| | `-- Ident: p
| |-- R_PAREN: )
| `-- block
| |-- L_BRACE: {
| |-- blockItem
| | `-- stmt
| | |-- lVal
| | | `-- Ident: p
| | |-- Assign: =
| | |-- exp
| | | `-- addExp
| | | |-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | `-- Ident: p
| | | |-- SubOp: -
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- number
| | | `-- IntConst: 1
| | `-- Semi: ;
| |-- blockItem
| | `-- stmt
| | |-- Return: return
| | |-- exp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- lVal
| | | `-- Ident: p
| | `-- Semi: ;
| `-- R_BRACE: }
|-- funcDef
| |-- funcType
| | `-- Int: int
| |-- Ident: main
| |-- L_PAREN: (
| |-- R_PAREN: )
| `-- block
| |-- L_BRACE: {
| |-- 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
| | | |-- L_PAREN: (
| | | |-- funcRParams
| | | | `-- exp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | `-- Ident: a
| | | `-- R_PAREN: )
| | `-- Semi: ;
| |-- blockItem
| | `-- stmt
| | |-- Return: return
| | |-- exp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- lVal
| | | `-- Ident: b
| | `-- Semi: ;
| `-- R_BRACE: }
`-- EOF: <EOF>

@ -0,0 +1,69 @@
compUnit
|-- funcDef
| |-- funcType
| | `-- Int: int
| |-- Ident: main
| |-- L_PAREN: (
| |-- R_PAREN: )
| `-- block
| |-- L_BRACE: {
| |-- 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
| | | | `-- SubOp: -
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- number
| | | `-- IntConst: 1
| | `-- Semi: ;
| |-- blockItem
| | `-- stmt
| | |-- Return: return
| | |-- exp
| | | `-- addExp
| | | |-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | `-- Ident: a
| | | |-- AddOp: +
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- lVal
| | | `-- Ident: b
| | `-- Semi: ;
| `-- R_BRACE: }
`-- EOF: <EOF>

@ -0,0 +1,67 @@
compUnit
|-- decl
| `-- constDecl
| |-- Const: const
| |-- bType
| | `-- Int: int
| |-- constDef
| | |-- Ident: a
| | |-- Assign: =
| | `-- constInitVal
| | `-- constExp
| | `-- addExp
| | `-- mulExp
| | `-- unaryExp
| | `-- primaryExp
| | `-- number
| | `-- IntConst: 10
| `-- Semi: ;
|-- funcDef
| |-- funcType
| | `-- Int: int
| |-- Ident: main
| |-- L_PAREN: (
| |-- R_PAREN: )
| `-- block
| |-- L_BRACE: {
| |-- 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
| | | |-- SubOp: -
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- lVal
| | | `-- Ident: a
| | `-- Semi: ;
| `-- R_BRACE: }
`-- EOF: <EOF>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,699 @@
compUnit
|-- funcDef
| |-- funcType
| | `-- Int: int
| |-- Ident: main
| |-- L_PAREN: (
| |-- R_PAREN: )
| `-- block
| |-- L_BRACE: {
| |-- blockItem
| | `-- stmt
| | |-- exp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | |-- Ident: putch
| | | |-- L_PAREN: (
| | | |-- funcRParams
| | | | `-- exp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 97
| | | `-- R_PAREN: )
| | `-- Semi: ;
| |-- blockItem
| | `-- stmt
| | |-- exp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | |-- Ident: putch
| | | |-- L_PAREN: (
| | | |-- funcRParams
| | | | `-- exp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 10
| | | `-- R_PAREN: )
| | `-- Semi: ;
| |-- blockItem
| | `-- decl
| | `-- varDecl
| | |-- bType
| | | `-- Int: int
| | |-- varDef
| | | |-- Ident: a
| | | |-- Assign: =
| | | `-- initVal
| | | `-- exp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- number
| | | `-- IntConst: 1
| | |-- Comma: ,
| | |-- varDef
| | | |-- Ident: putch
| | | |-- Assign: =
| | | `-- initVal
| | | `-- exp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- number
| | | `-- IntConst: 0
| | `-- Semi: ;
| |-- blockItem
| | `-- stmt
| | `-- block
| | |-- L_BRACE: {
| | |-- blockItem
| | | `-- stmt
| | | |-- lVal
| | | | `-- Ident: a
| | | |-- Assign: =
| | | |-- exp
| | | | `-- addExp
| | | | |-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: a
| | | | |-- AddOp: +
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 2
| | | `-- Semi: ;
| | |-- blockItem
| | | `-- decl
| | | `-- varDecl
| | | |-- bType
| | | | `-- Int: int
| | | |-- varDef
| | | | |-- Ident: b
| | | | |-- Assign: =
| | | | `-- initVal
| | | | `-- exp
| | | | `-- addExp
| | | | |-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: a
| | | | |-- AddOp: +
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 3
| | | `-- Semi: ;
| | |-- blockItem
| | | `-- stmt
| | | |-- lVal
| | | | `-- Ident: b
| | | |-- Assign: =
| | | |-- exp
| | | | `-- addExp
| | | | |-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: b
| | | | |-- AddOp: +
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 4
| | | `-- Semi: ;
| | |-- blockItem
| | | `-- stmt
| | | |-- lVal
| | | | `-- Ident: putch
| | | |-- Assign: =
| | | |-- exp
| | | | `-- addExp
| | | | |-- addExp
| | | | | |-- addExp
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: putch
| | | | | |-- AddOp: +
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: a
| | | | |-- AddOp: +
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | `-- Ident: b
| | | `-- Semi: ;
| | |-- blockItem
| | | `-- stmt
| | | `-- block
| | | |-- L_BRACE: {
| | | |-- blockItem
| | | | `-- stmt
| | | | |-- lVal
| | | | | `-- Ident: b
| | | | |-- Assign: =
| | | | |-- exp
| | | | | `-- addExp
| | | | | |-- addExp
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: b
| | | | | |-- AddOp: +
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- IntConst: 5
| | | | `-- Semi: ;
| | | |-- blockItem
| | | | `-- decl
| | | | `-- varDecl
| | | | |-- bType
| | | | | `-- Int: int
| | | | |-- varDef
| | | | | |-- Ident: main
| | | | | |-- Assign: =
| | | | | `-- initVal
| | | | | `-- exp
| | | | | `-- addExp
| | | | | |-- addExp
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: b
| | | | | |-- AddOp: +
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- IntConst: 6
| | | | `-- Semi: ;
| | | |-- blockItem
| | | | `-- stmt
| | | | |-- lVal
| | | | | `-- Ident: a
| | | | |-- Assign: =
| | | | |-- exp
| | | | | `-- addExp
| | | | | |-- addExp
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: a
| | | | | |-- AddOp: +
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: main
| | | | `-- Semi: ;
| | | |-- blockItem
| | | | `-- stmt
| | | | |-- lVal
| | | | | `-- Ident: putch
| | | | |-- Assign: =
| | | | |-- exp
| | | | | `-- addExp
| | | | | |-- addExp
| | | | | | |-- addExp
| | | | | | | |-- addExp
| | | | | | | | `-- mulExp
| | | | | | | | `-- unaryExp
| | | | | | | | `-- primaryExp
| | | | | | | | `-- lVal
| | | | | | | | `-- Ident: putch
| | | | | | | |-- AddOp: +
| | | | | | | `-- mulExp
| | | | | | | `-- unaryExp
| | | | | | | `-- primaryExp
| | | | | | | `-- lVal
| | | | | | | `-- Ident: a
| | | | | | |-- AddOp: +
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: b
| | | | | |-- AddOp: +
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: main
| | | | `-- Semi: ;
| | | |-- blockItem
| | | | `-- stmt
| | | | `-- block
| | | | |-- L_BRACE: {
| | | | |-- blockItem
| | | | | `-- stmt
| | | | | |-- lVal
| | | | | | `-- Ident: b
| | | | | |-- Assign: =
| | | | | |-- exp
| | | | | | `-- addExp
| | | | | | |-- addExp
| | | | | | | `-- mulExp
| | | | | | | `-- unaryExp
| | | | | | | `-- primaryExp
| | | | | | | `-- lVal
| | | | | | | `-- Ident: b
| | | | | | |-- AddOp: +
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: a
| | | | | `-- Semi: ;
| | | | |-- blockItem
| | | | | `-- decl
| | | | | `-- varDecl
| | | | | |-- bType
| | | | | | `-- Int: int
| | | | | |-- varDef
| | | | | | |-- Ident: a
| | | | | | |-- Assign: =
| | | | | | `-- initVal
| | | | | | `-- exp
| | | | | | `-- addExp
| | | | | | |-- addExp
| | | | | | | `-- mulExp
| | | | | | | `-- unaryExp
| | | | | | | `-- primaryExp
| | | | | | | `-- lVal
| | | | | | | `-- Ident: main
| | | | | | |-- AddOp: +
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- number
| | | | | | `-- IntConst: 7
| | | | | `-- Semi: ;
| | | | |-- blockItem
| | | | | `-- stmt
| | | | | |-- lVal
| | | | | | `-- Ident: a
| | | | | |-- Assign: =
| | | | | |-- exp
| | | | | | `-- addExp
| | | | | | |-- addExp
| | | | | | | `-- mulExp
| | | | | | | `-- unaryExp
| | | | | | | `-- primaryExp
| | | | | | | `-- lVal
| | | | | | | `-- Ident: a
| | | | | | |-- AddOp: +
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- number
| | | | | | `-- IntConst: 8
| | | | | `-- Semi: ;
| | | | |-- blockItem
| | | | | `-- stmt
| | | | | |-- lVal
| | | | | | `-- Ident: putch
| | | | | |-- Assign: =
| | | | | |-- exp
| | | | | | `-- addExp
| | | | | | |-- addExp
| | | | | | | |-- addExp
| | | | | | | | |-- addExp
| | | | | | | | | `-- mulExp
| | | | | | | | | `-- unaryExp
| | | | | | | | | `-- primaryExp
| | | | | | | | | `-- lVal
| | | | | | | | | `-- Ident: putch
| | | | | | | | |-- AddOp: +
| | | | | | | | `-- mulExp
| | | | | | | | `-- unaryExp
| | | | | | | | `-- primaryExp
| | | | | | | | `-- lVal
| | | | | | | | `-- Ident: a
| | | | | | | |-- AddOp: +
| | | | | | | `-- mulExp
| | | | | | | `-- unaryExp
| | | | | | | `-- primaryExp
| | | | | | | `-- lVal
| | | | | | | `-- Ident: b
| | | | | | |-- AddOp: +
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: main
| | | | | `-- Semi: ;
| | | | |-- blockItem
| | | | | `-- stmt
| | | | | `-- block
| | | | | |-- L_BRACE: {
| | | | | |-- blockItem
| | | | | | `-- stmt
| | | | | | |-- lVal
| | | | | | | `-- Ident: b
| | | | | | |-- Assign: =
| | | | | | |-- exp
| | | | | | | `-- addExp
| | | | | | | |-- addExp
| | | | | | | | `-- mulExp
| | | | | | | | `-- unaryExp
| | | | | | | | `-- primaryExp
| | | | | | | | `-- lVal
| | | | | | | | `-- Ident: b
| | | | | | | |-- AddOp: +
| | | | | | | `-- mulExp
| | | | | | | `-- unaryExp
| | | | | | | `-- primaryExp
| | | | | | | `-- lVal
| | | | | | | `-- Ident: a
| | | | | | `-- Semi: ;
| | | | | |-- blockItem
| | | | | | `-- decl
| | | | | | `-- varDecl
| | | | | | |-- bType
| | | | | | | `-- Int: int
| | | | | | |-- varDef
| | | | | | | |-- Ident: b
| | | | | | | |-- Assign: =
| | | | | | | `-- initVal
| | | | | | | `-- exp
| | | | | | | `-- addExp
| | | | | | | |-- addExp
| | | | | | | | `-- mulExp
| | | | | | | | `-- unaryExp
| | | | | | | | `-- primaryExp
| | | | | | | | `-- lVal
| | | | | | | | `-- Ident: main
| | | | | | | |-- AddOp: +
| | | | | | | `-- mulExp
| | | | | | | `-- unaryExp
| | | | | | | `-- primaryExp
| | | | | | | `-- number
| | | | | | | `-- IntConst: 9
| | | | | | `-- Semi: ;
| | | | | |-- blockItem
| | | | | | `-- stmt
| | | | | | |-- lVal
| | | | | | | `-- Ident: a
| | | | | | |-- Assign: =
| | | | | | |-- exp
| | | | | | | `-- addExp
| | | | | | | |-- addExp
| | | | | | | | `-- mulExp
| | | | | | | | `-- unaryExp
| | | | | | | | `-- primaryExp
| | | | | | | | `-- lVal
| | | | | | | | `-- Ident: a
| | | | | | | |-- AddOp: +
| | | | | | | `-- mulExp
| | | | | | | `-- unaryExp
| | | | | | | `-- primaryExp
| | | | | | | `-- number
| | | | | | | `-- IntConst: 10
| | | | | | `-- Semi: ;
| | | | | |-- blockItem
| | | | | | `-- decl
| | | | | | `-- constDecl
| | | | | | |-- Const: const
| | | | | | |-- bType
| | | | | | | `-- Int: int
| | | | | | |-- constDef
| | | | | | | |-- Ident: a
| | | | | | | |-- Assign: =
| | | | | | | `-- constInitVal
| | | | | | | `-- constExp
| | | | | | | `-- addExp
| | | | | | | `-- mulExp
| | | | | | | `-- unaryExp
| | | | | | | `-- primaryExp
| | | | | | | `-- number
| | | | | | | `-- IntConst: 11
| | | | | | `-- Semi: ;
| | | | | |-- blockItem
| | | | | | `-- stmt
| | | | | | |-- lVal
| | | | | | | `-- Ident: b
| | | | | | |-- Assign: =
| | | | | | |-- exp
| | | | | | | `-- addExp
| | | | | | | |-- addExp
| | | | | | | | `-- mulExp
| | | | | | | | `-- unaryExp
| | | | | | | | `-- primaryExp
| | | | | | | | `-- lVal
| | | | | | | | `-- Ident: b
| | | | | | | |-- AddOp: +
| | | | | | | `-- mulExp
| | | | | | | `-- unaryExp
| | | | | | | `-- primaryExp
| | | | | | | `-- number
| | | | | | | `-- IntConst: 12
| | | | | | `-- Semi: ;
| | | | | |-- blockItem
| | | | | | `-- stmt
| | | | | | |-- lVal
| | | | | | | `-- Ident: putch
| | | | | | |-- Assign: =
| | | | | | |-- exp
| | | | | | | `-- addExp
| | | | | | | |-- addExp
| | | | | | | | |-- addExp
| | | | | | | | | |-- addExp
| | | | | | | | | | `-- mulExp
| | | | | | | | | | `-- unaryExp
| | | | | | | | | | `-- primaryExp
| | | | | | | | | | `-- lVal
| | | | | | | | | | `-- Ident: putch
| | | | | | | | | |-- AddOp: +
| | | | | | | | | `-- mulExp
| | | | | | | | | `-- unaryExp
| | | | | | | | | `-- primaryExp
| | | | | | | | | `-- lVal
| | | | | | | | | `-- Ident: a
| | | | | | | | |-- AddOp: +
| | | | | | | | `-- mulExp
| | | | | | | | `-- unaryExp
| | | | | | | | `-- primaryExp
| | | | | | | | `-- lVal
| | | | | | | | `-- Ident: b
| | | | | | | |-- AddOp: +
| | | | | | | `-- mulExp
| | | | | | | `-- unaryExp
| | | | | | | `-- primaryExp
| | | | | | | `-- lVal
| | | | | | | `-- Ident: main
| | | | | | `-- Semi: ;
| | | | | |-- blockItem
| | | | | | `-- stmt
| | | | | | `-- block
| | | | | | |-- L_BRACE: {
| | | | | | |-- blockItem
| | | | | | | `-- stmt
| | | | | | | |-- lVal
| | | | | | | | `-- Ident: main
| | | | | | | |-- Assign: =
| | | | | | | |-- exp
| | | | | | | | `-- addExp
| | | | | | | | |-- addExp
| | | | | | | | | `-- mulExp
| | | | | | | | | `-- unaryExp
| | | | | | | | | `-- primaryExp
| | | | | | | | | `-- lVal
| | | | | | | | | `-- Ident: main
| | | | | | | | |-- AddOp: +
| | | | | | | | `-- mulExp
| | | | | | | | `-- unaryExp
| | | | | | | | `-- primaryExp
| | | | | | | | `-- lVal
| | | | | | | | `-- Ident: b
| | | | | | | `-- Semi: ;
| | | | | | |-- blockItem
| | | | | | | `-- decl
| | | | | | | `-- varDecl
| | | | | | | |-- bType
| | | | | | | | `-- Int: int
| | | | | | | |-- varDef
| | | | | | | | |-- Ident: main
| | | | | | | | |-- Assign: =
| | | | | | | | `-- initVal
| | | | | | | | `-- exp
| | | | | | | | `-- addExp
| | | | | | | | |-- addExp
| | | | | | | | | `-- mulExp
| | | | | | | | | `-- unaryExp
| | | | | | | | | `-- primaryExp
| | | | | | | | | `-- lVal
| | | | | | | | | `-- Ident: b
| | | | | | | | |-- AddOp: +
| | | | | | | | `-- mulExp
| | | | | | | | `-- unaryExp
| | | | | | | | `-- primaryExp
| | | | | | | | `-- number
| | | | | | | | `-- IntConst: 13
| | | | | | | `-- Semi: ;
| | | | | | |-- blockItem
| | | | | | | `-- stmt
| | | | | | | |-- lVal
| | | | | | | | `-- Ident: main
| | | | | | | |-- Assign: =
| | | | | | | |-- exp
| | | | | | | | `-- addExp
| | | | | | | | |-- addExp
| | | | | | | | | `-- mulExp
| | | | | | | | | `-- unaryExp
| | | | | | | | | `-- primaryExp
| | | | | | | | | `-- lVal
| | | | | | | | | `-- Ident: main
| | | | | | | | |-- AddOp: +
| | | | | | | | `-- mulExp
| | | | | | | | `-- unaryExp
| | | | | | | | `-- primaryExp
| | | | | | | | `-- lVal
| | | | | | | | `-- Ident: a
| | | | | | | `-- Semi: ;
| | | | | | |-- blockItem
| | | | | | | `-- stmt
| | | | | | | |-- lVal
| | | | | | | | `-- Ident: putch
| | | | | | | |-- Assign: =
| | | | | | | |-- exp
| | | | | | | | `-- addExp
| | | | | | | | |-- addExp
| | | | | | | | | |-- addExp
| | | | | | | | | | |-- addExp
| | | | | | | | | | | `-- mulExp
| | | | | | | | | | | `-- unaryExp
| | | | | | | | | | | `-- primaryExp
| | | | | | | | | | | `-- lVal
| | | | | | | | | | | `-- Ident: putch
| | | | | | | | | | |-- AddOp: +
| | | | | | | | | | `-- mulExp
| | | | | | | | | | `-- unaryExp
| | | | | | | | | | `-- primaryExp
| | | | | | | | | | `-- lVal
| | | | | | | | | | `-- Ident: a
| | | | | | | | | |-- AddOp: +
| | | | | | | | | `-- mulExp
| | | | | | | | | `-- unaryExp
| | | | | | | | | `-- primaryExp
| | | | | | | | | `-- lVal
| | | | | | | | | `-- Ident: b
| | | | | | | | |-- AddOp: +
| | | | | | | | `-- mulExp
| | | | | | | | `-- unaryExp
| | | | | | | | `-- primaryExp
| | | | | | | | `-- lVal
| | | | | | | | `-- Ident: main
| | | | | | | `-- Semi: ;
| | | | | | `-- R_BRACE: }
| | | | | |-- blockItem
| | | | | | `-- stmt
| | | | | | |-- lVal
| | | | | | | `-- Ident: putch
| | | | | | |-- Assign: =
| | | | | | |-- exp
| | | | | | | `-- addExp
| | | | | | | |-- addExp
| | | | | | | | `-- mulExp
| | | | | | | | `-- unaryExp
| | | | | | | | `-- primaryExp
| | | | | | | | `-- lVal
| | | | | | | | `-- Ident: putch
| | | | | | | |-- SubOp: -
| | | | | | | `-- mulExp
| | | | | | | `-- unaryExp
| | | | | | | `-- primaryExp
| | | | | | | `-- lVal
| | | | | | | `-- Ident: main
| | | | | | `-- Semi: ;
| | | | | `-- R_BRACE: }
| | | | |-- blockItem
| | | | | `-- stmt
| | | | | |-- lVal
| | | | | | `-- Ident: putch
| | | | | |-- Assign: =
| | | | | |-- exp
| | | | | | `-- addExp
| | | | | | |-- addExp
| | | | | | | `-- mulExp
| | | | | | | `-- unaryExp
| | | | | | | `-- primaryExp
| | | | | | | `-- lVal
| | | | | | | `-- Ident: putch
| | | | | | |-- SubOp: -
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: b
| | | | | `-- Semi: ;
| | | | `-- R_BRACE: }
| | | |-- blockItem
| | | | `-- stmt
| | | | |-- lVal
| | | | | `-- Ident: putch
| | | | |-- Assign: =
| | | | |-- exp
| | | | | `-- addExp
| | | | | |-- addExp
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: putch
| | | | | |-- SubOp: -
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: a
| | | | `-- Semi: ;
| | | `-- R_BRACE: }
| | `-- R_BRACE: }
| |-- blockItem
| | `-- stmt
| | |-- Return: return
| | |-- exp
| | | `-- addExp
| | | `-- mulExp
| | | |-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | `-- Ident: putch
| | | |-- ModOp: %
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- number
| | | `-- IntConst: 77
| | `-- Semi: ;
| `-- R_BRACE: }
`-- EOF: <EOF>

@ -0,0 +1,165 @@
compUnit
|-- funcDef
| |-- funcType
| | `-- Int: int
| |-- Ident: main
| |-- L_PAREN: (
| |-- R_PAREN: )
| `-- block
| |-- L_BRACE: {
| |-- 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
| | |-- L_PAREN: (
| | |-- cond
| | | `-- lOrExp
| | | `-- lAndExp
| | | `-- eqExp
| | | `-- relExp
| | | |-- relExp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | `-- Ident: i
| | | |-- LtOp: <
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- number
| | | `-- IntConst: 100
| | |-- R_PAREN: )
| | `-- stmt
| | `-- block
| | |-- L_BRACE: {
| | |-- blockItem
| | | `-- stmt
| | | |-- If: if
| | | |-- L_PAREN: (
| | | |-- cond
| | | | `-- lOrExp
| | | | `-- lAndExp
| | | | `-- eqExp
| | | | |-- eqExp
| | | | | `-- relExp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: i
| | | | |-- EqOp: ==
| | | | `-- relExp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 50
| | | |-- R_PAREN: )
| | | `-- stmt
| | | `-- block
| | | |-- L_BRACE: {
| | | |-- blockItem
| | | | `-- stmt
| | | | |-- Break: break
| | | | `-- Semi: ;
| | | `-- R_BRACE: }
| | |-- blockItem
| | | `-- stmt
| | | |-- lVal
| | | | `-- Ident: sum
| | | |-- Assign: =
| | | |-- exp
| | | | `-- addExp
| | | | |-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: sum
| | | | |-- AddOp: +
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | `-- Ident: i
| | | `-- Semi: ;
| | |-- blockItem
| | | `-- stmt
| | | |-- lVal
| | | | `-- Ident: i
| | | |-- Assign: =
| | | |-- exp
| | | | `-- addExp
| | | | |-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: i
| | | | |-- AddOp: +
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 1
| | | `-- Semi: ;
| | `-- R_BRACE: }
| |-- blockItem
| | `-- stmt
| | |-- Return: return
| | |-- exp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- lVal
| | | `-- Ident: sum
| | `-- Semi: ;
| `-- R_BRACE: }
`-- EOF: <EOF>

@ -0,0 +1,125 @@
compUnit
|-- funcDef
| |-- funcType
| | `-- Int: int
| |-- Ident: main
| |-- L_PAREN: (
| |-- R_PAREN: )
| `-- block
| |-- L_BRACE: {
| |-- 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
| | | | |-- L_PAREN: (
| | | | |-- exp
| | | | | `-- addExp
| | | | | |-- addExp
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: c
| | | | | |-- AddOp: +
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: a
| | | | `-- R_PAREN: )
| | | |-- MulOp: *
| | | `-- unaryExp
| | | `-- primaryExp
| | | |-- L_PAREN: (
| | | |-- exp
| | | | `-- addExp
| | | | |-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: b
| | | | |-- SubOp: -
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | `-- Ident: d
| | | `-- R_PAREN: )
| | `-- Semi: ;
| `-- R_BRACE: }
`-- EOF: <EOF>

File diff suppressed because it is too large Load Diff

@ -0,0 +1,63 @@
compUnit
|-- funcDef
| |-- funcType
| | `-- Int: int
| |-- Ident: main
| |-- L_PAREN: (
| |-- R_PAREN: )
| `-- block
| |-- L_BRACE: {
| |-- 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
| | | |-- AddOp: +
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- lVal
| | | `-- Ident: b
| | `-- Semi: ;
| `-- R_BRACE: }
`-- EOF: <EOF>

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

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

@ -0,0 +1,779 @@
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
| |-- L_PAREN: (
| |-- funcFParams
| | |-- funcFParam
| | | |-- bType
| | | | `-- Float: float
| | | |-- Ident: x
| | | |-- L_BRACKET: [
| | | `-- R_BRACKET: ]
| | |-- Comma: ,
| | |-- funcFParam
| | | |-- bType
| | | | `-- Float: float
| | | |-- Ident: y
| | | |-- L_BRACKET: [
| | | `-- R_BRACKET: ]
| | |-- Comma: ,
| | `-- funcFParam
| | |-- bType
| | | `-- Int: int
| | `-- Ident: length
| |-- R_PAREN: )
| `-- block
| |-- L_BRACE: {
| |-- 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
| | |-- L_PAREN: (
| | |-- cond
| | | `-- lOrExp
| | | `-- lAndExp
| | | `-- eqExp
| | | `-- relExp
| | | |-- relExp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | `-- Ident: i
| | | |-- LtOp: <
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- lVal
| | | `-- Ident: length
| | |-- R_PAREN: )
| | `-- stmt
| | `-- block
| | |-- L_BRACE: {
| | |-- blockItem
| | | `-- stmt
| | | |-- lVal
| | | | `-- Ident: accumulator
| | | |-- Assign: =
| | | |-- exp
| | | | `-- addExp
| | | | |-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: accumulator
| | | | |-- AddOp: +
| | | | `-- mulExp
| | | | |-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | |-- Ident: x
| | | | | |-- L_BRACKET: [
| | | | | |-- exp
| | | | | | `-- addExp
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: i
| | | | | `-- R_BRACKET: ]
| | | | |-- MulOp: *
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | |-- Ident: y
| | | | |-- L_BRACKET: [
| | | | |-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: i
| | | | `-- R_BRACKET: ]
| | | `-- Semi: ;
| | |-- blockItem
| | | `-- stmt
| | | |-- lVal
| | | | `-- Ident: i
| | | |-- Assign: =
| | | |-- exp
| | | | `-- addExp
| | | | |-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: i
| | | | |-- AddOp: +
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 1
| | | `-- Semi: ;
| | `-- R_BRACE: }
| |-- blockItem
| | `-- stmt
| | |-- Return: return
| | |-- exp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- lVal
| | | `-- Ident: accumulator
| | `-- Semi: ;
| `-- R_BRACE: }
|-- funcDef
| |-- funcType
| | `-- Int: int
| |-- Ident: main
| |-- L_PAREN: (
| |-- R_PAREN: )
| `-- block
| |-- L_BRACE: {
| |-- 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
| | | |-- L_PAREN: (
| | | `-- R_PAREN: )
| | `-- Semi: ;
| |-- blockItem
| | `-- decl
| | `-- varDecl
| | |-- bType
| | | `-- Float: float
| | |-- varDef
| | | |-- Ident: x
| | | |-- L_BRACKET: [
| | | |-- constExp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 4096
| | | `-- R_BRACKET: ]
| | `-- Semi: ;
| |-- blockItem
| | `-- decl
| | `-- varDecl
| | |-- bType
| | | `-- Float: float
| | |-- varDef
| | | |-- Ident: y
| | | |-- L_BRACKET: [
| | | |-- constExp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 4096
| | | `-- R_BRACKET: ]
| | `-- 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
| | | |-- L_PAREN: (
| | | `-- R_PAREN: )
| | `-- Semi: ;
| |-- blockItem
| | `-- stmt
| | |-- While: while
| | |-- L_PAREN: (
| | |-- cond
| | | `-- lOrExp
| | | `-- lAndExp
| | | `-- eqExp
| | | `-- relExp
| | | |-- relExp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | `-- Ident: i
| | | |-- LtOp: <
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- lVal
| | | `-- Ident: COUNT
| | |-- R_PAREN: )
| | `-- stmt
| | `-- block
| | |-- L_BRACE: {
| | |-- blockItem
| | | `-- stmt
| | | |-- If: if
| | | |-- L_PAREN: (
| | | |-- cond
| | | | `-- lOrExp
| | | | `-- lAndExp
| | | | `-- eqExp
| | | | `-- relExp
| | | | `-- addExp
| | | | `-- mulExp
| | | | |-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: i
| | | | |-- ModOp: %
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 10
| | | |-- R_PAREN: )
| | | |-- stmt
| | | | `-- block
| | | | |-- L_BRACE: {
| | | | |-- 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: ;
| | | | `-- R_BRACE: }
| | | |-- Else: else
| | | `-- stmt
| | | `-- block
| | | |-- L_BRACE: {
| | | |-- blockItem
| | | | `-- stmt
| | | | |-- lVal
| | | | | `-- Ident: a
| | | | |-- Assign: =
| | | | |-- exp
| | | | | `-- addExp
| | | | | |-- addExp
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: a
| | | | | |-- AddOp: +
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- FloatConst: 0.1
| | | | `-- Semi: ;
| | | |-- blockItem
| | | | `-- stmt
| | | | |-- lVal
| | | | | `-- Ident: b
| | | | |-- Assign: =
| | | | |-- exp
| | | | | `-- addExp
| | | | | |-- addExp
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: b
| | | | | |-- AddOp: +
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- FloatConst: 0.2
| | | | `-- Semi: ;
| | | `-- R_BRACE: }
| | |-- blockItem
| | | `-- stmt
| | | |-- While: while
| | | |-- L_PAREN: (
| | | |-- cond
| | | | `-- lOrExp
| | | | `-- lAndExp
| | | | `-- eqExp
| | | | `-- relExp
| | | | |-- relExp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: j
| | | | |-- LtOp: <
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | `-- Ident: len
| | | |-- R_PAREN: )
| | | `-- stmt
| | | `-- block
| | | |-- L_BRACE: {
| | | |-- blockItem
| | | | `-- stmt
| | | | |-- lVal
| | | | | |-- Ident: x
| | | | | |-- L_BRACKET: [
| | | | | |-- exp
| | | | | | `-- addExp
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: j
| | | | | `-- R_BRACKET: ]
| | | | |-- Assign: =
| | | | |-- exp
| | | | | `-- addExp
| | | | | |-- addExp
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: a
| | | | | |-- AddOp: +
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: j
| | | | `-- Semi: ;
| | | |-- blockItem
| | | | `-- stmt
| | | | |-- lVal
| | | | | |-- Ident: y
| | | | | |-- L_BRACKET: [
| | | | | |-- exp
| | | | | | `-- addExp
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: j
| | | | | `-- R_BRACKET: ]
| | | | |-- Assign: =
| | | | |-- exp
| | | | | `-- addExp
| | | | | |-- addExp
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: b
| | | | | |-- AddOp: +
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: j
| | | | `-- Semi: ;
| | | |-- blockItem
| | | | `-- stmt
| | | | |-- lVal
| | | | | `-- Ident: j
| | | | |-- Assign: =
| | | | |-- exp
| | | | | `-- addExp
| | | | | |-- addExp
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: j
| | | | | |-- AddOp: +
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- IntConst: 1
| | | | `-- Semi: ;
| | | `-- R_BRACE: }
| | |-- blockItem
| | | `-- stmt
| | | |-- lVal
| | | | `-- Ident: total
| | | |-- Assign: =
| | | |-- exp
| | | | `-- addExp
| | | | |-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: total
| | | | |-- AddOp: +
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | |-- Ident: loop
| | | | |-- L_PAREN: (
| | | | |-- 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
| | | | `-- R_PAREN: )
| | | `-- Semi: ;
| | |-- blockItem
| | | `-- stmt
| | | |-- lVal
| | | | `-- Ident: i
| | | |-- Assign: =
| | | |-- exp
| | | | `-- addExp
| | | | |-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: i
| | | | |-- AddOp: +
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 1
| | | `-- Semi: ;
| | `-- R_BRACE: }
| |-- blockItem
| | `-- stmt
| | |-- exp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | |-- Ident: stoptime
| | | |-- L_PAREN: (
| | | `-- R_PAREN: )
| | `-- Semi: ;
| |-- blockItem
| | `-- stmt
| | |-- If: if
| | |-- L_PAREN: (
| | |-- cond
| | | `-- lOrExp
| | | |-- lOrExp
| | | | `-- lAndExp
| | | | `-- eqExp
| | | | `-- relExp
| | | | |-- relExp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | |-- L_PAREN: (
| | | | | |-- exp
| | | | | | `-- addExp
| | | | | | |-- addExp
| | | | | | | `-- mulExp
| | | | | | | `-- unaryExp
| | | | | | | `-- primaryExp
| | | | | | | `-- lVal
| | | | | | | `-- Ident: total
| | | | | | |-- SubOp: -
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- number
| | | | | | `-- FloatConst: 11442437121638400.000000
| | | | | `-- R_PAREN: )
| | | | |-- LeOp: <=
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- FloatConst: 0.000001
| | | |-- OrOp: ||
| | | `-- lAndExp
| | | `-- eqExp
| | | `-- relExp
| | | |-- relExp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | |-- L_PAREN: (
| | | | |-- exp
| | | | | `-- addExp
| | | | | |-- addExp
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: total
| | | | | |-- SubOp: -
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- FloatConst: 11442437121638400.000000
| | | | `-- R_PAREN: )
| | | |-- GeOp: >=
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | |-- unaryOp
| | | | `-- SubOp: -
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- number
| | | `-- FloatConst: 0.000001
| | |-- R_PAREN: )
| | |-- stmt
| | | `-- block
| | | |-- L_BRACE: {
| | | |-- blockItem
| | | | `-- stmt
| | | | |-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | |-- Ident: putint
| | | | | |-- L_PAREN: (
| | | | | |-- funcRParams
| | | | | | `-- exp
| | | | | | `-- addExp
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- number
| | | | | | `-- IntConst: 0
| | | | | `-- R_PAREN: )
| | | | `-- Semi: ;
| | | |-- blockItem
| | | | `-- stmt
| | | | |-- Return: return
| | | | |-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- IntConst: 0
| | | | `-- Semi: ;
| | | `-- R_BRACE: }
| | |-- Else: else
| | `-- stmt
| | `-- block
| | |-- L_BRACE: {
| | |-- blockItem
| | | `-- stmt
| | | |-- exp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | |-- Ident: putint
| | | | |-- L_PAREN: (
| | | | |-- funcRParams
| | | | | `-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- IntConst: 1
| | | | `-- R_PAREN: )
| | | `-- Semi: ;
| | |-- blockItem
| | | `-- stmt
| | | |-- Return: return
| | | |-- exp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 1
| | | `-- Semi: ;
| | `-- R_BRACE: }
| `-- R_BRACE: }
`-- EOF: <EOF>

@ -0,0 +1,890 @@
compUnit
|-- decl
| `-- varDecl
| |-- bType
| | `-- Int: int
| |-- varDef
| | |-- Ident: matrix
| | |-- L_BRACKET: [
| | |-- constExp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- number
| | | `-- IntConst: 20000000
| | `-- R_BRACKET: ]
| `-- Semi: ;
|-- decl
| `-- varDecl
| |-- bType
| | `-- Int: int
| |-- varDef
| | |-- Ident: a
| | |-- L_BRACKET: [
| | |-- constExp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- number
| | | `-- IntConst: 100000
| | `-- R_BRACKET: ]
| `-- Semi: ;
|-- funcDef
| |-- funcType
| | `-- Int: int
| |-- Ident: transpose
| |-- L_PAREN: (
| |-- funcFParams
| | |-- funcFParam
| | | |-- bType
| | | | `-- Int: int
| | | `-- Ident: n
| | |-- Comma: ,
| | |-- funcFParam
| | | |-- bType
| | | | `-- Int: int
| | | |-- Ident: matrix
| | | |-- L_BRACKET: [
| | | `-- R_BRACKET: ]
| | |-- Comma: ,
| | `-- funcFParam
| | |-- bType
| | | `-- Int: int
| | `-- Ident: rowsize
| |-- R_PAREN: )
| `-- block
| |-- L_BRACE: {
| |-- blockItem
| | `-- decl
| | `-- varDecl
| | |-- bType
| | | `-- Int: int
| | |-- varDef
| | | |-- Ident: colsize
| | | |-- Assign: =
| | | `-- initVal
| | | `-- exp
| | | `-- addExp
| | | `-- mulExp
| | | |-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | `-- Ident: n
| | | |-- DivOp: /
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- lVal
| | | `-- Ident: rowsize
| | `-- Semi: ;
| |-- blockItem
| | `-- decl
| | `-- varDecl
| | |-- bType
| | | `-- Int: int
| | |-- varDef
| | | |-- Ident: i
| | | |-- Assign: =
| | | `-- initVal
| | | `-- exp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- number
| | | `-- IntConst: 0
| | `-- Semi: ;
| |-- blockItem
| | `-- decl
| | `-- varDecl
| | |-- bType
| | | `-- Int: int
| | |-- varDef
| | | |-- Ident: j
| | | |-- Assign: =
| | | `-- initVal
| | | `-- exp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- number
| | | `-- IntConst: 0
| | `-- Semi: ;
| |-- blockItem
| | `-- stmt
| | |-- While: while
| | |-- L_PAREN: (
| | |-- cond
| | | `-- lOrExp
| | | `-- lAndExp
| | | `-- eqExp
| | | `-- relExp
| | | |-- relExp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | `-- Ident: i
| | | |-- LtOp: <
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- lVal
| | | `-- Ident: colsize
| | |-- R_PAREN: )
| | `-- stmt
| | `-- block
| | |-- L_BRACE: {
| | |-- blockItem
| | | `-- stmt
| | | |-- lVal
| | | | `-- Ident: j
| | | |-- Assign: =
| | | |-- exp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 0
| | | `-- Semi: ;
| | |-- blockItem
| | | `-- stmt
| | | |-- While: while
| | | |-- L_PAREN: (
| | | |-- cond
| | | | `-- lOrExp
| | | | `-- lAndExp
| | | | `-- eqExp
| | | | `-- relExp
| | | | |-- relExp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: j
| | | | |-- LtOp: <
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | `-- Ident: rowsize
| | | |-- R_PAREN: )
| | | `-- stmt
| | | `-- block
| | | |-- L_BRACE: {
| | | |-- blockItem
| | | | `-- stmt
| | | | |-- If: if
| | | | |-- L_PAREN: (
| | | | |-- cond
| | | | | `-- lOrExp
| | | | | `-- lAndExp
| | | | | `-- eqExp
| | | | | `-- relExp
| | | | | |-- relExp
| | | | | | `-- addExp
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: i
| | | | | |-- LtOp: <
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: j
| | | | |-- R_PAREN: )
| | | | `-- stmt
| | | | `-- block
| | | | |-- L_BRACE: {
| | | | |-- blockItem
| | | | | `-- stmt
| | | | | |-- lVal
| | | | | | `-- Ident: j
| | | | | |-- Assign: =
| | | | | |-- exp
| | | | | | `-- addExp
| | | | | | |-- addExp
| | | | | | | `-- mulExp
| | | | | | | `-- unaryExp
| | | | | | | `-- primaryExp
| | | | | | | `-- lVal
| | | | | | | `-- Ident: j
| | | | | | |-- AddOp: +
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- number
| | | | | | `-- IntConst: 1
| | | | | `-- Semi: ;
| | | | |-- blockItem
| | | | | `-- stmt
| | | | | |-- Continue: continue
| | | | | `-- Semi: ;
| | | | `-- R_BRACE: }
| | | |-- blockItem
| | | | `-- decl
| | | | `-- varDecl
| | | | |-- bType
| | | | | `-- Int: int
| | | | |-- varDef
| | | | | |-- Ident: curr
| | | | | |-- Assign: =
| | | | | `-- initVal
| | | | | `-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | |-- Ident: matrix
| | | | | |-- L_BRACKET: [
| | | | | |-- exp
| | | | | | `-- addExp
| | | | | | |-- addExp
| | | | | | | `-- mulExp
| | | | | | | |-- mulExp
| | | | | | | | `-- unaryExp
| | | | | | | | `-- primaryExp
| | | | | | | | `-- lVal
| | | | | | | | `-- Ident: i
| | | | | | | |-- MulOp: *
| | | | | | | `-- unaryExp
| | | | | | | `-- primaryExp
| | | | | | | `-- lVal
| | | | | | | `-- Ident: rowsize
| | | | | | |-- AddOp: +
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: j
| | | | | `-- R_BRACKET: ]
| | | | `-- Semi: ;
| | | |-- blockItem
| | | | `-- stmt
| | | | |-- lVal
| | | | | |-- Ident: matrix
| | | | | |-- L_BRACKET: [
| | | | | |-- exp
| | | | | | `-- addExp
| | | | | | |-- addExp
| | | | | | | `-- mulExp
| | | | | | | |-- mulExp
| | | | | | | | `-- unaryExp
| | | | | | | | `-- primaryExp
| | | | | | | | `-- lVal
| | | | | | | | `-- Ident: j
| | | | | | | |-- MulOp: *
| | | | | | | `-- unaryExp
| | | | | | | `-- primaryExp
| | | | | | | `-- lVal
| | | | | | | `-- Ident: colsize
| | | | | | |-- AddOp: +
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: i
| | | | | `-- R_BRACKET: ]
| | | | |-- Assign: =
| | | | |-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | |-- Ident: matrix
| | | | | |-- L_BRACKET: [
| | | | | |-- exp
| | | | | | `-- addExp
| | | | | | |-- addExp
| | | | | | | `-- mulExp
| | | | | | | |-- mulExp
| | | | | | | | `-- unaryExp
| | | | | | | | `-- primaryExp
| | | | | | | | `-- lVal
| | | | | | | | `-- Ident: i
| | | | | | | |-- MulOp: *
| | | | | | | `-- unaryExp
| | | | | | | `-- primaryExp
| | | | | | | `-- lVal
| | | | | | | `-- Ident: rowsize
| | | | | | |-- AddOp: +
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: j
| | | | | `-- R_BRACKET: ]
| | | | `-- Semi: ;
| | | |-- blockItem
| | | | `-- stmt
| | | | |-- lVal
| | | | | |-- Ident: matrix
| | | | | |-- L_BRACKET: [
| | | | | |-- exp
| | | | | | `-- addExp
| | | | | | |-- addExp
| | | | | | | `-- mulExp
| | | | | | | |-- mulExp
| | | | | | | | `-- unaryExp
| | | | | | | | `-- primaryExp
| | | | | | | | `-- lVal
| | | | | | | | `-- Ident: i
| | | | | | | |-- MulOp: *
| | | | | | | `-- unaryExp
| | | | | | | `-- primaryExp
| | | | | | | `-- lVal
| | | | | | | `-- Ident: rowsize
| | | | | | |-- AddOp: +
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: j
| | | | | `-- R_BRACKET: ]
| | | | |-- Assign: =
| | | | |-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: curr
| | | | `-- Semi: ;
| | | |-- blockItem
| | | | `-- stmt
| | | | |-- lVal
| | | | | `-- Ident: j
| | | | |-- Assign: =
| | | | |-- exp
| | | | | `-- addExp
| | | | | |-- addExp
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: j
| | | | | |-- AddOp: +
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- number
| | | | | `-- IntConst: 1
| | | | `-- Semi: ;
| | | `-- R_BRACE: }
| | |-- blockItem
| | | `-- stmt
| | | |-- lVal
| | | | `-- Ident: i
| | | |-- Assign: =
| | | |-- exp
| | | | `-- addExp
| | | | |-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: i
| | | | |-- AddOp: +
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 1
| | | `-- Semi: ;
| | `-- R_BRACE: }
| |-- blockItem
| | `-- stmt
| | |-- Return: return
| | |-- exp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | |-- unaryOp
| | | | `-- SubOp: -
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- number
| | | `-- IntConst: 1
| | `-- Semi: ;
| `-- R_BRACE: }
|-- funcDef
| |-- funcType
| | `-- Int: int
| |-- Ident: main
| |-- L_PAREN: (
| |-- R_PAREN: )
| `-- block
| |-- L_BRACE: {
| |-- blockItem
| | `-- decl
| | `-- varDecl
| | |-- bType
| | | `-- Int: int
| | |-- varDef
| | | |-- Ident: n
| | | |-- Assign: =
| | | `-- initVal
| | | `-- exp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | |-- Ident: getint
| | | |-- L_PAREN: (
| | | `-- R_PAREN: )
| | `-- Semi: ;
| |-- blockItem
| | `-- decl
| | `-- varDecl
| | |-- bType
| | | `-- Int: int
| | |-- varDef
| | | |-- Ident: len
| | | |-- Assign: =
| | | `-- initVal
| | | `-- exp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | |-- Ident: getarray
| | | |-- L_PAREN: (
| | | |-- funcRParams
| | | | `-- exp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | `-- Ident: a
| | | `-- R_PAREN: )
| | `-- Semi: ;
| |-- blockItem
| | `-- stmt
| | |-- exp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | |-- Ident: starttime
| | | |-- L_PAREN: (
| | | `-- R_PAREN: )
| | `-- 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
| | |-- L_PAREN: (
| | |-- cond
| | | `-- lOrExp
| | | `-- lAndExp
| | | `-- eqExp
| | | `-- relExp
| | | |-- relExp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | `-- Ident: i
| | | |-- LtOp: <
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- lVal
| | | `-- Ident: n
| | |-- R_PAREN: )
| | `-- stmt
| | `-- block
| | |-- L_BRACE: {
| | |-- blockItem
| | | `-- stmt
| | | |-- lVal
| | | | |-- Ident: matrix
| | | | |-- L_BRACKET: [
| | | | |-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: i
| | | | `-- R_BRACKET: ]
| | | |-- 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
| | | | |-- AddOp: +
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 1
| | | `-- Semi: ;
| | `-- R_BRACE: }
| |-- blockItem
| | `-- stmt
| | |-- lVal
| | | `-- Ident: i
| | |-- Assign: =
| | |-- exp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- number
| | | `-- IntConst: 0
| | `-- Semi: ;
| |-- blockItem
| | `-- stmt
| | |-- While: while
| | |-- L_PAREN: (
| | |-- cond
| | | `-- lOrExp
| | | `-- lAndExp
| | | `-- eqExp
| | | `-- relExp
| | | |-- relExp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | `-- Ident: i
| | | |-- LtOp: <
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- lVal
| | | `-- Ident: len
| | |-- R_PAREN: )
| | `-- stmt
| | `-- block
| | |-- L_BRACE: {
| | |-- blockItem
| | | `-- stmt
| | | |-- exp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | |-- Ident: transpose
| | | | |-- L_PAREN: (
| | | | |-- 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
| | | | | |-- L_BRACKET: [
| | | | | |-- exp
| | | | | | `-- addExp
| | | | | | `-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: i
| | | | | `-- R_BRACKET: ]
| | | | `-- R_PAREN: )
| | | `-- Semi: ;
| | |-- blockItem
| | | `-- stmt
| | | |-- lVal
| | | | `-- Ident: i
| | | |-- Assign: =
| | | |-- exp
| | | | `-- addExp
| | | | |-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: i
| | | | |-- AddOp: +
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 1
| | | `-- Semi: ;
| | `-- R_BRACE: }
| |-- 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
| | |-- L_PAREN: (
| | |-- cond
| | | `-- lOrExp
| | | `-- lAndExp
| | | `-- eqExp
| | | `-- relExp
| | | |-- relExp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | `-- Ident: i
| | | |-- LtOp: <
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- lVal
| | | `-- Ident: len
| | |-- R_PAREN: )
| | `-- stmt
| | `-- block
| | |-- L_BRACE: {
| | |-- blockItem
| | | `-- stmt
| | | |-- lVal
| | | | `-- Ident: ans
| | | |-- Assign: =
| | | |-- exp
| | | | `-- addExp
| | | | |-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: ans
| | | | |-- AddOp: +
| | | | `-- mulExp
| | | | |-- mulExp
| | | | | |-- mulExp
| | | | | | `-- unaryExp
| | | | | | `-- primaryExp
| | | | | | `-- lVal
| | | | | | `-- Ident: i
| | | | | |-- MulOp: *
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: i
| | | | |-- MulOp: *
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | |-- Ident: matrix
| | | | |-- L_BRACKET: [
| | | | |-- exp
| | | | | `-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: i
| | | | `-- R_BRACKET: ]
| | | `-- Semi: ;
| | |-- blockItem
| | | `-- stmt
| | | |-- lVal
| | | | `-- Ident: i
| | | |-- Assign: =
| | | |-- exp
| | | | `-- addExp
| | | | |-- addExp
| | | | | `-- mulExp
| | | | | `-- unaryExp
| | | | | `-- primaryExp
| | | | | `-- lVal
| | | | | `-- Ident: i
| | | | |-- AddOp: +
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 1
| | | `-- Semi: ;
| | `-- R_BRACE: }
| |-- blockItem
| | `-- stmt
| | |-- If: if
| | |-- L_PAREN: (
| | |-- cond
| | | `-- lOrExp
| | | `-- lAndExp
| | | `-- eqExp
| | | `-- relExp
| | | |-- relExp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | `-- Ident: ans
| | | |-- LtOp: <
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- number
| | | `-- IntConst: 0
| | |-- R_PAREN: )
| | `-- stmt
| | |-- lVal
| | | `-- Ident: ans
| | |-- Assign: =
| | |-- exp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | |-- unaryOp
| | | | `-- SubOp: -
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- lVal
| | | `-- Ident: ans
| | `-- Semi: ;
| |-- blockItem
| | `-- stmt
| | |-- exp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | |-- Ident: stoptime
| | | |-- L_PAREN: (
| | | `-- R_PAREN: )
| | `-- Semi: ;
| |-- blockItem
| | `-- stmt
| | |-- exp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | |-- Ident: putint
| | | |-- L_PAREN: (
| | | |-- funcRParams
| | | | `-- exp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- lVal
| | | | `-- Ident: ans
| | | `-- R_PAREN: )
| | `-- Semi: ;
| |-- blockItem
| | `-- stmt
| | |-- exp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | |-- Ident: putch
| | | |-- L_PAREN: (
| | | |-- funcRParams
| | | | `-- exp
| | | | `-- addExp
| | | | `-- mulExp
| | | | `-- unaryExp
| | | | `-- primaryExp
| | | | `-- number
| | | | `-- IntConst: 10
| | | `-- R_PAREN: )
| | `-- Semi: ;
| |-- blockItem
| | `-- stmt
| | |-- Return: return
| | |-- exp
| | | `-- addExp
| | | `-- mulExp
| | | `-- unaryExp
| | | `-- primaryExp
| | | `-- number
| | | `-- IntConst: 0
| | `-- Semi: ;
| `-- R_BRACE: }
`-- EOF: <EOF>

File diff suppressed because it is too large Load Diff

@ -3,96 +3,226 @@
// 的最小返回表达式编译。
// 后续需要自行添加
grammar SysY;
/*===-------------------------------------------===*/
/* Lexer rules */
/*===-------------------------------------------===*/
INT: 'int';
RETURN: 'return';
compUnit
: (funcDef|decl)+ EOF
;
ASSIGN: '=';
ADD: '+';
funcDef
: funcType Ident L_PAREN (funcFParams)? R_PAREN block
;
LPAREN: '(';
RPAREN: ')';
LBRACE: '{';
RBRACE: '}';
SEMICOLON: ';';
funcType
: Void | Int | Float
;
ID: [a-zA-Z_][a-zA-Z_0-9]*;
ILITERAL: [0-9]+;
funcFParams
: funcFParam (Comma funcFParam)*
;
WS: [ \t\r\n] -> skip;
LINECOMMENT: '//' ~[\r\n]* -> skip;
BLOCKCOMMENT: '/*' .*? '*/' -> skip;
funcFParam
: bType Ident (L_BRACKET R_BRACKET (L_BRACKET exp R_BRACKET)*)?
;
/*===-------------------------------------------===*/
/* Syntax rules */
/*===-------------------------------------------===*/
block
: L_BRACE (blockItem)* R_BRACE
;
compUnit
: funcDef EOF
blockItem
: decl
| stmt
;
decl
: btype varDef SEMICOLON
: varDecl | constDecl
;
btype
: INT
constDecl
: Const bType constDef (Comma constDef)* Semi
;
varDef
: lValue (ASSIGN initValue)?
bType
: Int | Float
;
initValue
: exp
constDef
: Ident (L_BRACKET constExp R_BRACKET)* Assign constInitVal
;
funcDef
: funcType ID LPAREN RPAREN blockStmt
constInitVal
: constExp
| L_BRACE ( constInitVal (Comma constInitVal)* )? R_BRACE
;
funcType
: INT
stmt
: lVal Assign exp Semi
| (exp)? Semi
| block
| If L_PAREN cond R_PAREN stmt ( Else stmt )?
| While L_PAREN cond R_PAREN stmt
| Break Semi
| Continue Semi
| Return (exp)? Semi
;
blockStmt
: LBRACE blockItem* RBRACE
cond
: lOrExp
;
blockItem
: decl
| stmt
lVal
: Ident (L_BRACKET exp R_BRACKET)*
;
stmt
: returnStmt
primaryExp
: L_PAREN exp R_PAREN | lVal | number
;
number
: IntConst | FloatConst
;
unaryExp
: primaryExp
| Ident L_PAREN (funcRParams)? R_PAREN
| unaryOp unaryExp
;
unaryOp
: AddOp | SubOp | NotOp
;
funcRParams
: exp (Comma exp)*
;
returnStmt
: RETURN exp SEMICOLON
mulExp
: unaryExp | mulExp (MulOp | DivOp | ModOp) unaryExp
;
addExp
: mulExp | addExp (AddOp | SubOp) mulExp
;
relExp
: addExp | relExp (LtOp | GtOp | LeOp | GeOp) addExp
;
eqExp
: relExp | eqExp (EqOp | NeOp) relExp
;
lAndExp
: eqExp | lAndExp AndOp eqExp
;
lOrExp
: lAndExp | lOrExp OrOp lAndExp
;
constExp
: addExp
;
varDecl
: bType varDef (Comma varDef)* Semi
;
varDef
: Ident (L_BRACKET constExp R_BRACKET)*
| Ident (L_BRACKET constExp R_BRACKET)* Assign initVal
;
initVal
: exp | L_BRACE ( initVal (Comma initVal)* )? R_BRACE
;
exp
: LPAREN exp RPAREN # parenExp
| var # varExp
| number # numberExp
| exp ADD exp # additiveExp
: addExp
;
var
: ID
// 关键字
Void : 'void';
Int : 'int';
Float : 'float';
Const : 'const';
If : 'if';
Else : 'else';
While : 'while';
Break : 'break';
Continue : 'continue';
Return : 'return';
// 符号
AddOp : '+';
SubOp : '-';
Assign : '=';
MulOp : '*';
DivOp : '/';
ModOp : '%';
NotOp : '!';
AndOp : '&&';
OrOp : '||';
EqOp : '==';
NeOp : '!=';
LtOp : '<';
GtOp : '>';
LeOp : '<=';
GeOp : '>=';
Semi : ';';
Comma : ',';
L_PAREN : '(';
R_PAREN : ')';
L_BRACE : '{';
R_BRACE : '}';
L_BRACKET: '[';
R_BRACKET: ']';
Ident
: [a-zA-Z_][a-zA-Z_0-9]*
;
lValue
: ID
IntConst
: '0' [xX] [0-9a-fA-F]+
| '0' [0-7]*
| [1-9] [0-9]*
;
number
: ILITERAL
FloatConst
: DecFloatConst
| HexFloatConst
;
fragment DecFloatConst
: DecFrac DecExp?
| [0-9]+ DecExp
;
fragment DecFrac
: [0-9]+ '.' [0-9]*
| '.' [0-9]+
;
fragment DecExp
: [eE] [+\-]? [0-9]+
;
fragment HexFloatConst
: '0' [xX] HexFrac BinExp
| '0' [xX] [0-9a-fA-F]+ BinExp
;
fragment HexFrac
: [0-9a-fA-F]+ '.' [0-9a-fA-F]*
| '.' [0-9a-fA-F]+
;
fragment BinExp
: [pP] [+\-]? [0-9]+
;
WS
: [ \t\r\n]+ -> skip
;
COMMENT
: '//' ~[\r\n]* -> skip
;
BLOCK_COMMENT
: '/*' .*? '*/' -> skip
;

@ -0,0 +1,276 @@
#!/bin/bash
# batch_parse_tree.sh - 批量生成SysY文件的语法树
# 设置颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 默认配置
TEST_DIR="./test" # 测试文件目录
OUTPUT_DIR="./lab1_results" # 输出目录
COMPILER="./build/bin/compiler" # 编译器路径
COMPILER_OPT="--emit-parse-tree" # 编译器选项
VERBOSE=false # 是否显示详细信息
OVERWRITE=false # 是否覆盖已存在的文件
# 显示帮助信息
show_help() {
cat << EOF
用法: $0 [选项]
选项:
-d, --dir DIR 指定测试文件目录 (默认: ./test)
-o, --output DIR 指定输出目录 (默认: ./parse_trees)
-c, --compiler FILE 指定编译器路径 (默认: ./build/bin/compiler)
-v, --verbose 显示详细信息
-f, --force 覆盖已存在的输出文件
-h, --help 显示帮助信息
示例:
$0 # 使用默认配置
$0 -d ./testcases -o ./output # 指定目录
$0 -v -f # 显示详细信息并覆盖已有文件
EOF
}
# 解析命令行参数
while [[ $# -gt 0 ]]; do
case $1 in
-d|--dir)
TEST_DIR="$2"
shift 2
;;
-o|--output)
OUTPUT_DIR="$2"
shift 2
;;
-c|--compiler)
COMPILER="$2"
shift 2
;;
-v|--verbose)
VERBOSE=true
shift
;;
-f|--force)
OVERWRITE=true
shift
;;
-h|--help)
show_help
exit 0
;;
*)
echo -e "${RED}错误: 未知选项 $1${NC}"
show_help
exit 1
;;
esac
done
# 检查编译器是否存在
if [ ! -f "$COMPILER" ]; then
echo -e "${RED}错误: 编译器不存在: $COMPILER${NC}"
echo -e "${YELLOW}提示: 请先编译项目或指定正确的编译器路径${NC}"
exit 1
fi
# 检查测试目录是否存在
if [ ! -d "$TEST_DIR" ]; then
echo -e "${RED}错误: 测试目录不存在: $TEST_DIR${NC}"
exit 1
fi
# 创建输出目录
mkdir -p "$OUTPUT_DIR"
# 统计变量
TOTAL=0
SUCCESS=0
FAILED=0
SKIPPED=0
# 创建日志文件
LOG_FILE="$OUTPUT_DIR/batch_parse.log"
echo "批量语法树生成日志 - $(date)" > "$LOG_FILE"
echo "==========================================" >> "$LOG_FILE"
# 查找所有.sy文件
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE}开始批量生成语法树${NC}"
echo -e "${BLUE}测试目录: $TEST_DIR${NC}"
echo -e "${BLUE}输出目录: $OUTPUT_DIR${NC}"
echo -e "${BLUE}编译器: $COMPILER${NC}"
echo -e "${BLUE}========================================${NC}"
# 使用find命令查找所有.sy文件
while IFS= read -r -d '' file; do
TOTAL=$((TOTAL + 1))
# 获取相对路径和文件名
rel_path="${file#$TEST_DIR/}"
filename=$(basename "$file")
dir_path=$(dirname "$rel_path")
# 创建对应的输出目录
target_dir="$OUTPUT_DIR/$dir_path"
mkdir -p "$target_dir"
# 输出文件名
base_name="${filename%.sy}"
output_file="$target_dir/${base_name}.tree"
error_file="$target_dir/${base_name}.err"
# 检查文件是否已存在
if [ -f "$output_file" ] && [ "$OVERWRITE" = false ]; then
echo -e "${YELLOW}[跳过] $rel_path (已存在)${NC}"
echo "[SKIP] $file -> $output_file (已存在)" >> "$LOG_FILE"
SKIPPED=$((SKIPPED + 1))
continue
fi
# 显示进度
if [ "$VERBOSE" = true ]; then
echo -e "${YELLOW}[$TOTAL] 处理: $rel_path${NC}"
else
echo -ne "${YELLOW}[$TOTAL] 处理: $filename ... ${NC}"
fi
# 执行编译器命令
"$COMPILER" $COMPILER_OPT "$file" > "$output_file" 2> "$error_file"
exit_code=$?
# 检查结果
if [ $exit_code -eq 0 ] && [ -s "$output_file" ]; then
if [ "$VERBOSE" = false ]; then
echo -e "${GREEN}✓ 成功${NC}"
else
echo -e "${GREEN}✓ 成功 - 输出: $output_file${NC}"
fi
echo "[SUCCESS] $file -> $output_file" >> "$LOG_FILE"
SUCCESS=$((SUCCESS + 1))
# 如果错误文件为空,删除它
if [ ! -s "$error_file" ]; then
rm -f "$error_file"
fi
else
if [ "$VERBOSE" = false ]; then
echo -e "${RED}✗ 失败${NC}"
else
echo -e "${RED}✗ 失败 - 错误: $error_file${NC}"
fi
echo "[FAILED] $file (exit code: $exit_code)" >> "$LOG_FILE"
cat "$error_file" >> "$LOG_FILE"
echo "----------------------------------------" >> "$LOG_FILE"
FAILED=$((FAILED + 1))
fi
done < <(find "$TEST_DIR" -type f -name "*.sy" -print0)
# 输出统计信息
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE}处理完成${NC}"
echo -e "${GREEN}成功: $SUCCESS${NC}"
echo -e "${RED}失败: $FAILED${NC}"
echo -e "${YELLOW}跳过: $SKIPPED${NC}"
echo -e "${BLUE}总计: $TOTAL${NC}"
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE}日志文件: $LOG_FILE${NC}"
# 如果有失败的文件,列出它们
if [ $FAILED -gt 0 ]; then
echo -e "\n${RED}失败的文件列表:${NC}"
grep "\[FAILED\]" "$LOG_FILE" | while read -r line; do
echo " $line"
done
fi
# 生成汇总报告
REPORT_FILE="$OUTPUT_DIR/report.html"
cat > "$REPORT_FILE" << EOF
<!DOCTYPE html>
<html>
<head>
<title>语法树生成报告</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
h1 { color: #333; }
.summary { background: #f0f0f0; padding: 10px; border-radius: 5px; }
.success { color: green; }
.failure { color: red; }
.skipped { color: orange; }
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #4CAF50; color: white; }
tr:nth-child(even) { background-color: #f2f2f2; }
.file-link { text-decoration: none; color: #0066cc; }
.file-link:hover { text-decoration: underline; }
</style>
</head>
<body>
<h1>SysY语法树生成报告</h1>
<div class="summary">
<h2>统计信息</h2>
<p>生成时间: $(date)</p>
<p>测试目录: $TEST_DIR</p>
<p>输出目录: $OUTPUT_DIR</p>
<p>总计: $TOTAL</p>
<p>成功: <span class="success">$SUCCESS</span></p>
<p>失败: <span class="failure">$FAILED</span></p>
<p>跳过: <span class="skipped">$SKIPPED</span></p>
<p>成功率: $((SUCCESS * 100 / TOTAL))%</p>
</div>
<h2>详细结果</h2>
<table>
<tr>
<th>文件</th>
<th>状态</th>
<th>输出文件</th>
<th>错误信息</th>
</tr>
EOF
# 遍历所有文件生成报告
find "$TEST_DIR" -type f -name "*.sy" -print0 | while IFS= read -r -d '' file; do
rel_path="${file#$TEST_DIR/}"
filename=$(basename "$file")
base_name="${filename%.sy}"
dir_path=$(dirname "$rel_path")
output_file="$OUTPUT_DIR/$dir_path/${base_name}.tree"
error_file="$OUTPUT_DIR/$dir_path/${base_name}.err"
status="成功"
status_class="success"
error_msg="-"
if [ ! -f "$output_file" ] || [ ! -s "$output_file" ]; then
status="失败"
status_class="failure"
if [ -f "$error_file" ] && [ -s "$error_file" ]; then
error_msg=$(head -1 "$error_file" | sed 's/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g')
fi
fi
cat >> "$REPORT_FILE" << EOF
<tr>
<td>$rel_path</td>
<td class="$status_class">$status</td>
<td><a href="$dir_path/${base_name}.tree" class="file-link">${base_name}.tree</a></td>
<td>$error_msg</td>
</tr>
EOF
done
cat >> "$REPORT_FILE" << EOF
</table>
</body>
</html>
EOF
echo -e "${GREEN}HTML报告已生成: $REPORT_FILE${NC}"
Loading…
Cancel
Save