我正在尝试捕获没有引号的带引号的字符串。我有这个终端
%token <string> STRING
而这个制作
constant:
| QUOTE STRING QUOTE { String($2) }
连同这些词法分析器规则
| '\'' { QUOTE }
| [^ '\'']* { STRING (lexeme lexbuf) } //final regex before eof
它似乎将导致 a 的所有内容解释QUOTE
为一个不解析的单个词素。所以也许我的问题出在语法的其他地方——不确定。我会以正确的方式解决这个问题吗?在我尝试从字符串中排除引号之前,它解析得很好。
更新
我认为以下词法分析器规则可能存在一些歧义
let name = alpha (alpha | digit | '_')*
let identifier = name ('.' name)*
以下规则先于STRING
| identifier { ID (lexeme lexbuf) }
有没有办法在不包括STRING
正则表达式的引号的情况下消除这些歧义?