java - 为简单的伪代码语言创建解析器?

标签 java parsing

我想用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
  }
}

请注意,上面的代码是严格的,一行中不能有多个语句,整数以 $ 开头, float 以 # 开头等。

要解析此类代码,首先我可以使用 StringTokenizer,然后使用正则表达式来匹配整数变量、浮点变量或关键字。

这个方法好不好?对于循环中的语句,如何存储表达式,以便不必在每次迭代中进行标记?

我可以考虑将表达式(如#f = #f/2)转换为抛光符号,然后存储在堆栈中。在每次迭代中,在弹出操作数时,我可以替换每个变量的值。但这足够有效吗?

预先感谢您的任何建议。

最佳答案

虽然我认为为这样的语言构建一个解析器很棒,但这样做比看起来要困难得多。解析是一个经过充分研究的问题,您可以使用许多优秀的算法,但它们很难手动实现。虽然您可以使用转换为 RPN 等技巧来处理解析表达式等较小的示例,但构建完整的编程语言需要一组更复杂的技巧。

要解析如此复杂的语言,您可能最好使用解析器生成器,而不是尝试手动编写自己的解析器生成器。 ANTLRJava CUP是两个众所周知的工具,可以精确地完成您感兴趣的任务,我强烈建议使用其中两个工具之一。

希望这有帮助!

关于java - 为简单的伪代码语言创建解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9957873/

相关文章:

java - 遵循一些规则逐层打印二叉树

java - 配置上下文查找以查找 Tomcat 8 上的 JNDI 资源环境

java - 在 Kotlin Android 中将值传递给函数时进行编译时间检查

c# - 从 C# 中的较长字符串解析此数字的最佳方法是什么?

java - JSON 对象提取值

java - 数字从字符串到 char 数组再到 int 数组

java - 自定义哈希算法

c# - 需要为 C# 代码构建 XML 表示

c++ - 使用下推自动化创建语法树?

javascript - 来自服务器的带有 JSON 的 Backbone 解析模型