【问题标题】:How to resolve conflict in choice in multiple choices case that have the same token如何解决具有相同标记的多选情况下的选择冲突
【发布时间】:2015-08-17 14:44:45
【问题描述】:

我正在尝试为某些特定格式的消息编写编译器。我现在的问题是因为我正在构建不同格式的特定消息,所以描述如下

< WORD : ([LETTER]){2,5}>
< ANOTHER_WORD : (<LETTER>|<DIGIT>){1,5}>
< SPECIAL_WORLD_EN : "START">
< SPECIAL_WORLD_FR : "COMMENCER">
< SPECIAL_END_WORLD_EN : "END">
< SPECIAL_END_WORLD_FR : "FIN">
< LEFT_BRACKET : "[">
< RIGHT_BRACKET : "]">
void grammar():
{
}
{ 
LOOKAHEAD(2)
 <LEFT_BRACKET><SPECIAL_WORLD_EN>< WORD ><RIGHT_PAREN>
| <LEFT_BRACKET><SPECIAL_WORLD_FR>< WORD >< ANOTHER_WORD ><RIGHT_BRACKET>
| <LEFT_BRACKET><SPECIAL_END_WORLD_EN>(< WORD >)?<RIGHT_BRACKET>
| <LEFT_BRACKET><SPECIAL_END_WORLD_FR>(< WORD >)+<RIGHT_BRACKET>
}

所以 LOOKAHEAD(2) 解决了前两个选择的冲突。 如何解决其他选择的冲突 (在真正的语法中我有4个以上的选择)

更新 我设法通过在每个选项中使用 LOOKAHEAD(2) 来消除选项冲突警告

void grammar():
{
}
{ 
LOOKAHEAD(2)
 <LEFT_BRACKET><SPECIAL_WORLD_EN>< WORD ><RIGHT_PAREN>
| LOOKAHEAD(2) <LEFT_BRACKET><SPECIAL_WORLD_FR>< WORD >< ANOTHER_WORD ><RIGHT_BRACKET>
| LOOKAHEAD(2) <LEFT_BRACKET><SPECIAL_END_WORLD_EN>(< WORD >)?<RIGHT_BRACKET>
| LOOKAHEAD(2) <LEFT_BRACKET><SPECIAL_END_WORLD_FR>(< WORD >)+<RIGHT_BRACKET>
}

我不确定这是不是最好的解决方案,还有其他更好/正确的方法来解决它吗?

【问题讨论】:

  • 你还没有解决stackoverflow.com/questions/32008283/…中描述的词汇问题
  • 好吧,它已经修复了,但仍然有一些像这样的问题。
  • WORD的生产中,[LETTER]应该是&lt;LETTER&gt;吗?
  • 你有两种问题。你有一个解析问题。解决方案如下。您还有一个词法问题,这是由于您的正则表达式产生的顺序而引起的。解决方案是在回答您之前的问题时给出的。除非您修复词汇语法,否则即使它是正确的,解析语法也不会起作用。阅读常见问题解答,那里都有解释。
  • 我有数以百计的代币,它们的构造都是特定的。这使得订购它们变得困难。如果我改变词汇状态,这种歧义可以解决吗? (为每个选项定义一个自定义状态)

标签: compiler-construction lexer javacc


【解决方案1】:

左因子:

void grammar():
{ }
{ 
    <LEFT_BRACKET>
    ( <SPECIAL_WORLD_EN>< WORD ><RIGHT_PAREN>
    | <SPECIAL_WORLD_FR>< WORD >< ANOTHER_WORD ><RIGHT_BRACKET>
    | <SPECIAL_END_WORLD_EN>(< WORD >)?<RIGHT_BRACKET>
    | <SPECIAL_END_WORLD_FR>(< WORD >)+<RIGHT_BRACKET> )
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-16
    • 1970-01-01
    相关资源
    最近更新 更多