首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lex Yacc,我应该标记化字符文字吗?

Lex Yacc,我应该标记化字符文字吗?
EN

Stack Overflow用户
提问于 2011-01-06 09:24:52
回答 1查看 799关注 0票数 0

我知道,这个问题表达得很糟糕,我不知道还能怎么问。不管我输入的是什么,我似乎总是在error分支中结束,并且不能弄清楚我把它搞砸了。我使用的是一种特殊风格的Lex/YACC,称为GPPG,它将所有这些都设置为与C#一起使用。

这是我的Y

代码语言:javascript
复制
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

代码语言:javascript
复制
\'[^']*\'           {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,将各种参数作为值传递

我还尝试了几种派生方法。例如:

代码语言:javascript
复制
 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;}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-06 10:00:53

您需要一个lex规则来“按原样”返回标点符号,以便yacc语法能够识别它们。类似于:

代码语言:javascript
复制
[()]        { return *yytext; }

添加到您的第二个示例中应该可以做到这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4610967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档