我对解析器/cfg 或 jison 非常陌生。我希望我的语法做的是:
阅读 Token ADDRESS 到 EOF 之后的所有内容
“ADDRESS TO EOF”之间可以有多个 ADDRESS 令牌(从步骤 1 开始)
我的示例输入如下所示:
...abc xyz address 101 My Street, Austin, CO 12345 is abc xyz my name is govind my address is 102 My Street,Austin, CO 12345 and here it is end of file.
我期待的输出是
address 101 My Street, Austin, CO 12345 is abc xyz my name is govind my address is 102 My Street,Austin, CO 12345 and here it is end of file.`
我正在尝试的代码是
/* lexical grammar */
%lex
%options flex
%{
if (!('chars' in yy)) {
yy.temp = 0;
}
%}
%%
\s+ /* skip whitespace */
(address|Address) return 'ADDRESS'
<<EOF>> return 'EOF'
[A-Za-z0-9]+ return 'VARIABLE'
. /*skip */
/lex
%start expressions
%% /* language grammar */
expressions
: other EOF
{return $1;}
;
other
:VARIABLE{$$=$1;}
|other ADDRESS other {$$=$1+"-"+$2+"-"+$3;}
;
我认为应该有更多的表达来实现输出,就像other ADDRESS other
引发 S/R 冲突一样。谁能建议我如何在第一个ADDRESS
令牌出现之前跳过所有输入,而不是将所有其他输入放入$$
. 谢谢。