【发布时间】:2012-10-10 03:27:58
【问题描述】:
我在决定抽象语法树如何在内存中产生问题时遇到了麻烦,它是每个语句的树森林?还是单根二叉树?
示例来源:
P: 10
if A < 15:
P: 9
这是 BNF 语法:
<Prog> ::= <Stmts>
<Stmts> ::= <Stmt> | <Stmt> <Stmt>
<Stmt> ::= <IfStmt> NL | <AssignStmt> NL
<AssignStmt> ::= <Id> : <Aexp> | <Indents> <AssignStmt>
<IfStmt> ::= if <Lexp> : NL <Stmts> | <Indents> <IfStmt>
<Aexp> ::= <Id> | <Int> | <Aexp> <AOP> <Aexp>
<Lexp> ::= <Aexp> <LOP> <Aexp>
<LOP> ::= < | > | &
<AOP> ::= + | - | * | /
<Int> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | <Int> <Int>
<Id> ::= A | B | C | D | E | F | P
<Indents> ::= SPC | SPC <Indents>
其中SPC 表示空格,NL 表示换行符。是的,它只允许 7 个标识符。和正整数。
它很容易进行词法分析,但是我搜索了很多,但大多数 AST 示例仅使用易于掌握的数学表达式。如果您发现我的语法不正确,请说出来。另请注意,该语法是受 Python 启发的,我已经阅读了 Lexical Analysis 文档,但它甚至没有提到单词树。
提前致谢。
【问题讨论】:
标签: parsing data-structures compiler-construction abstract-syntax-tree bnf