【发布时间】:2012-04-15 00:26:00
【问题描述】:
我想用 Java 制作一个简单的解析器,用于像语言(保持僵化)这样的“伪代码”。 一个示例伪代码将是 -
//This is a comment
$x1 = readint
$x2 = readint
$dx = $x2 - $x1
#f = $dx / 2
if ($dx > 0)
{
loop while(#f > 1)
{
print(#f)
#f = #f / 2
}
}
请注意,上面的代码是死板的,一行不能有多个语句,整数以$开头,浮点数以#开头等等。
要解析此类代码,首先我可以使用StringTokenizer,然后使用正则表达式来匹配整数变量、浮点变量或关键字。
这种方法好吗?对于循环中的语句,我如何存储表达式,这样我就不必在每次迭代中进行标记?
我可以考虑将表达式(如#f = #f / 2)转换为波兰符号,然后存储在堆栈中。在每次迭代中,在弹出操作数时,我可以替换每个变量的值。但这是否足够高效?
提前感谢您的任何建议。
【问题讨论】:
-
this question的可能重复