我很难弄清楚,决定抽象语法树将如何产生内存,它是每个语句的树森林?还是单根二叉树?
样本来源:
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文档,但它甚至没有提到单词树。
提前致谢。