我有简单的语言,如:
funa X ( X+3*funb(1) ) ;
funb Y ( 2*Y ) ;
main ( 2+func(func(1)) ) ;
func A ( funa(A) ) ;
我使用 CFG 将上面的解析为:
program => (statement)+
statement => (<main_keyword> | <idl> <idu>) <lparan> expression <rparan> <semicolon>
expression => T(<plus> T)*
T => P(<multipliation>P)*
P => <idu> | <idl> <lparan> expression <rparan> | <number>
和令牌识别:
<main_keyword> -> "main"
<idl> -> (["a"-"z"])+
<idu> -> (["A"-"Z"])+
<lparan> -> "("
<rparan> -> ")"
<semicolon> -> ";"
<number> -> (["0"-"9"])+
<plus> -> "+"
<multiplication> -> "*"
我可以使用 javaCC 解析以上内容,但我不知道如何使用解析器评估以上此类程序。上面的程序应该评估为 15。如何在 javaCC 中实现这样的,是否可以使用扩充解析器产生?函数可以出现在任何地方,调用前或调用后。
谢谢