晚上好,Stack Overflow。 我想基于一个非常简单的无上下文语法为表达式开发一个解释器:
基本上,语言由2个基本语句构成
( SET var 25 ) // Output: var = 25
( GET ( MUL var 5 ) ) // Output: 125
( SET var2 ( MUL 30 5 ) ) //Output: var2 = 150
现在,我非常确定我应该怎样做才能解释一个陈述:1)词法分析将一个陈述变成一个令牌序列2)语法分析得到一个符号表(HashMap with the变量及其值)和语法树(执行GET语句)3)执行树的顺序访问以获得我想要的结果。
我想要解析源文件的解析方法。考虑到解析器应该忽略任何空格,制表或换行符,是否可以使用Java模式来获取我想要分析的一般语句?是否有一种很好的方法来阅读奇怪格式化(可能更复杂)的语句,如此
(
SET var
25
)
不会将解析器与开放和封闭的括号混淆?
例如
Scanner scan; //scanner reading the source file
String pattern = "..." //ideal pattern I've found to represent an expression
while(scan.hasNext(pattern))
Interpreter.computeStatement(scan.next(pattern));
这个问题是否可行?
答案 0 :(得分:1)
最后,我理解感谢Ira Baxter,这个上下文无关语法不能用RegExp解析,我使用S-Expressions的概念来构建解释器,你可以找到它的源代码{{ 3}}。如果您对此有任何疑问(主要是因为评论不是用英语翻译的,即使我认为代码非常清楚),请在此留言或发表评论。
基本上我所做的是: