如何为非 lambda-free 语言创建 ANTLR 语法?
我试图使用 ANTLR v4.9.3 模仿下面显示的语法 G ...
< a href="https://i.sstatic.net/vpAid.png" rel="nofollow noreferrer">
我的尝试如下所示...
grammar G ;
s : t s | ;
t : 'aaa' t 'bbb' | ;
我按如下方式调用 ANTLR 工具...
org.antlr.v4.Tool G.g4
该工具的响应是...
The following sets of rules are mutually left-recursive [s]
我的问题是...
如何为语法 G 创建 ANTLR 语法?
为了消除错误,语法G已更新为...
grammar G ;
s : t* EOF ;
t : 'aaa' 'bbb' | 'aaa' t 'bbb' ;
我还尝试以编程方式区分L(G)中的字符串>,以及不在 L(G) 中的字符串(其中 L(G) 是语法 G 生成的语言)。在以下代码中,第一个字符串位于 L(G) 中,但第二个字符串不在 L(G) 中。
String [] stringArray = { "aaaaaabbbbbbaaabbbaaaaaabbbbbb",
"aaabbbaaaaaabbbbbbaaabbbb" } ;
for ( int i = 0 ; i < stringArray.length ; i ++ )
{
CharStream charStream = CharStreams.fromString ( stringArray[i] ) ;
GLexer lexer = new GLexer( charStream ) ;
CommonTokenStream tokens = new CommonTokenStream( lexer ) ;
GParser parser = new GParser( tokens ) ;
ParseTree tree = parser.s() ;
} // end for i loop
我希望代码能够打印诸如……
The string "aaaaaabbbbbbaaabbbaaaaaabbbbbb" is in L(G).
和……
The string "aaabbbaaaaaabbbbbbaaabbbb" is not in L(G).
如何以编程方式区分解析成功的字符串(并且位于L(G)中),以及无法成功解析的字符串(并且不在 L(G) 中)?
I am attempting to mimic the grammar G shown below using ANTLR v4.9.3 …
My attempt to do so is shown below …
grammar G ;
s : t s | ;
t : 'aaa' t 'bbb' | ;
I invoke the ANTLR Tool as follows …
org.antlr.v4.Tool G.g4
The tool's response is …
The following sets of rules are mutually left-recursive [s]
My question is …
How does one create an ANTLR grammar for grammar G ?
In order to eliminate the errors, grammar G has been updated to …
grammar G ;
s : t* EOF ;
t : 'aaa' 'bbb' | 'aaa' t 'bbb' ;
I am also trying to programatically distinguish between strings that are in L(G), and strings that are not in L(G) (where L(G) is the language generated by grammar G). In the following code, the first string is in L(G), but the second string is not in L(G).
String [] stringArray = { "aaaaaabbbbbbaaabbbaaaaaabbbbbb",
"aaabbbaaaaaabbbbbbaaabbbb" } ;
for ( int i = 0 ; i < stringArray.length ; i ++ )
{
CharStream charStream = CharStreams.fromString ( stringArray[i] ) ;
GLexer lexer = new GLexer( charStream ) ;
CommonTokenStream tokens = new CommonTokenStream( lexer ) ;
GParser parser = new GParser( tokens ) ;
ParseTree tree = parser.s() ;
} // end for i loop
I'd like the code to print messages such as …
The string "aaaaaabbbbbbaaabbbaaaaaabbbbbb" is in L(G).
… and …
The string "aaabbbaaaaaabbbbbbaaabbbb" is not in L(G).
How does one programmatically distinguish between strings that parse successfully (and are in L(G)), and strings that fail to parse successfully (and are not in L(G)) ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论