【问题标题】:syntax matching of a string in javajava中字符串的语法匹配
【发布时间】:2013-01-31 05:44:08
【问题描述】:

在Java中,我想写一个语法匹配器。

对于string1: a = a+b, and string2: c = c+d, syntax_matcher(string1,string2) = true.

但是,if string1 : a > 0; string2 : c == 0, syntax_matcher(string1,string2) = false.

任何想法,如何有效地做到这一点?

【问题讨论】:

  • 用你的匹配器方法创建一个自定义类,根据你的要求重写 equals 方法。
  • @PremGenError 正则表达式无法解决其 CFG 问题。
  • 你匹配语句的“程序结构”吗?如果是,那么您可能需要将文本解析为抽象语法树并进行比较。不过可能有点矫枉过正。
  • @PremGenError 上下文无关语法。可能是:/
  • @PremGenError 上下文无关语法:)

标签: java string syntax string-matching


【解决方案1】:

也许你可以做的是写一个Stack,并为第一个语句从左到右移动,推像VAR然后ASSIGNMENT,然后VAR,然后OPERATOR然后@987654326 @。

一旦你有了它,你就可以从第二个表达式开始,从从右到左移动,每次都将你拥有的内容与你从堆栈中弹出的内容进行比较。

您正在阅读的内容与您弹出的内容之间的任何不匹配都会产生false

【讨论】:

  • a = a + b * cd = b * c + d 可能会失败。两者语法相同。
【解决方案2】:

使用LR-parser (Wikipedia) 解析表达式,因为它们可能是上下文无关语言。对于 Java,您可能想使用例如CUP open-source parser generator

然后使用您最喜欢的树比较方法比较生成的syntax trees (Wikipedia)

请参阅Chomsky Hierarchy (Wikipedia),了解常规语言和上下文无关语言的区别。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 2017-08-03
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 2018-01-01
    相关资源
    最近更新 更多