基于JavaCC的语法描述
使用JavaCC从token序列中识别出"语句" “表达式” “函数调用” 等语法单位的方法。
只要为JavaCC描述“语句” “表达式” “函数调用” 这样的语法单位各自是由怎样的token序列构成的,就能够对该语法进行分析(parse)。
例如:最简单的赋值表达式可以描述为“符号” “ “=” ” ”表达式“ 的排列。 换言之, 如果存在”符号“ ” ”=“ “ ”表达式“ 这样的排列 那就是赋值表达式。这个规则在JavaCC中表示成下面这样:
assign():
{}
{
"=" expr()
}
assign()对应赋值表达式,对应token标示符,"="对应"="token。
像这样已经在扫描器中定义的token,在描述解析器时可以直接使用。其他的如"="这样的固定字符串也因为可以表示token,所以也能在规则中使用。 另外,表达式expr()自身也是多个token构成的,这样的情况下需要进一步对expr()的规则进行描述,以下是伪描述:
expr():
{}
{
expr() "+" expr()
或expr() "-" expr()
或expr() "*" expr()
..
.
}
终端符与非终端符
JavaCC中将"语句" "函数调用" "表达式" 等非token的语法单位称为非终端