我知道,措辞不好的问题不知道怎么回事。 我似乎总是在错误分支中结束,无论我进入什么,无法弄清楚我在哪里搞砸了。我正在使用一种名为GPPG的特殊口味的Lex / YACC,它只是将这一切设置为与C#一起使用
这是我的Y
method : L_METHOD L_VALUE ')' { System.Diagnostics.Debug.WriteLine("Found a method: Name:" + $1.Data ); }
| error { System.Diagnostics.Debug.WriteLine("Not valid in this statement context ");/*Throw new exception*/ }
;
这是我的Lex
\'[^']*\' {this.yylval.Data = yytext.Replace("'",""); return (int)Tokens.L_VALUE;}
[a-zA-Z0-9]+\( {this.yylval.Data = yytext; return (int)Tokens.L_METHOD;}
我的想法是我应该能够通过
Method('value')
并正确认识到这是正确的语法
最终计划是执行Method
将各种参数作为值
我也尝试了几种推导。例如:
method : L_METHOD '(' L_VALUE ')' { System.Diagnostics.Debug.WriteLine("Found a method: Name:" + $1.Data ); }
| error { System.Diagnostics.Debug.WriteLine("Not valid in this statement context: ");/*Throw new exception*/ }
;
\'[^']*\' {this.yylval.Data = yytext.Replace("'",""); return (int)Tokens.L_VALUE;}
[a-zA-Z0-9]+ {this.yylval.Data = yytext; return (int)Tokens.L_METHOD;}
答案 0 :(得分:1)
你需要一个lex规则来按原样返回标点符号,以便yacc语法可以识别它们。类似的东西:
[()] { return *yytext; }
添加到你的第二个例子应该做的伎俩。