解析可以包含带有 ANTLR4 的括号的列表



假设我想创建一个类似于Lisp的语法,其中所有表达式都在左括号和右括号之间。

例如:

(+ 1 2)

我还希望语法能够将字符串解析为类似于(expression ( literal '(def foo) ))的解析树('(def foo))。 这意味着它应该成功地将文本表达式中的括号与文本相关联。

总的来说,LISP 在语法方面是非常用户可扩展的,所以我不知道获得任何 BNF(+( 形式的可能性有多大。这是关于它的讨论;我相信如果你搜索它还有更多。

但对于玩具示例,这可能没问题:

<s_expression>  ::= <atomic_symbol>
| "(" <s_expression> "." <s_expression> ")"
| <list> .
<_list>         ::= <s_expression> <_list>
| <s_expression> .
<list>          ::= "(" <s_expression> <_list> ")" .
<atomic_symbol> ::= <letter> <atom_part> | "'"  <s_expression> .
<atom_part>     ::= <empty> | <letter> <atom_part> | <number> <atom_part> .
<letter>        ::= "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j"
| "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t"
| "u" | "v" | "w" | "x" | "y" | "z" .
<number>        ::= "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "0" .
<empty>         ::= " ".

从这里修改

我匆忙修改了语法,所以如果你发现它有任何问题,请告诉我。

另外,我已经很久没有使用ANTLR,所以我不知道它是否完全采用它所排除的格式。但是正确格式化它应该是微不足道的。

相关内容

  • 没有找到相关文章

最新更新