实际上,也许不是成熟的Lex/Yacc。我正在实现一个命令解释器前端来管理一个web应用程序。我正在寻找可以采用语法定义并将其转换为直接调用我的对象上的方法的解析器的东西。类似于ASP.NETMVC如何确定调用哪个Controller方法,以及如何设置参数。因此,如果用户在我的命令提示符下键入“createfoo”,它应该透明地调用一个方法:privatevoidCreate(stringid){/*...*/}哦,如果它可以从这些Controller方法的(例如)属性生成帮助文本,那也太棒了。 最佳答案 我用GPLEX/GPPG完
在goyacc中获取某种形式的上下文到yacc解析器的最惯用的方法是什么?,即模拟%param传统yacc中的命令?我需要为我的.Parse函数解析一些上下文(在本例中包括例如在哪里构建其解析树)。goyacc.Parse函数是declaredfunc($$rcvr*$$ParserImpl)Parse($$lex$$Lexer)int{我想到的事情:$$ParserImplcannotbechanged通过.y文件,所以显而易见的解决方案(向其添加字段)就出来了,这很遗憾。由于$$Lexer是一个接口(interface),我可以将解析器上下文填充到Lexer实现中,然后强制将$$l
我正在用Yacc(与Go打包在一起的语言)为一种玩具语言编写语法,由于以下伪问题,我有一个预期的shift-reduce冲突。我必须将问题语法提炼为以下内容。start:stmt_listexpr:INT|IDENT|lambda|'('expr')'{$$=$2}lambda:'('params')''{'stmt_list'}'params:expr|params','exprstmt:/*empty*/|exprstmt_list:stmt|stmt_list';'stmtlambda函数看起来像这样:map((v){v*2},collection)我的解析器发出:conflic
我正在尝试使用golang'syacctool创建解析器.我找到了nex简化创建一个词法分析器给解析器。我现在的问题是生成的解析器没有方法或字段可以让我访问解析结果。我可以将解析结果存储在一个全局变量中,但这似乎是错误的。目前,我已将以下内容作为初始尝试添加到我的parser.y文件的顶部:typeResultParserinterface{yyParser//GeneratedparserinterfaceResult()s.Expr//s.Exprisaninterfacefortheparsedresult}func(p*yyParserImpl)Result()s.Expr{r
使用这个命令:gotoolyacc-pVerb-overb.goboilerplate.y尝试构建这个yacc文件://boilerplate.y%{packagemainimport("bufio""fmt""os""unicode")%}%%.|\nECHO;%%funcmain(){fi:=bufio.NewReader(os.NewFile(0,"stdin"))s,err:=fi.ReadString('\n')iferr!=nil{fmt.Println('error',err)}VerbParse(&VerbLex{s:s})}错误:第一条规则语法错误:boilerpla
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭6年前。Improvethisquestion我认为Bison和Yacc经常用于解析编程语言的语法。(以及用于标记化的lex/flex...)我的问题是:所有的编译器都是用这个工具制作的还是有人从头开始编写他们的解析器?(我主要是在没有“编译器编译器”的情况下做的,但我知道他们)在没有这些工具的情况下构建解析器是否“有利可图”?yacc/bison和lex/flex是否有更“开放”且不那么严格的替代方案。C的库是
使用lex/yacc编写C++编译器需要多少时间?我可以从哪里开始? 最佳答案 bison/yacc解析器无法解析许多解析规则(例如,在某些情况下区分声明和函数调用)。此外,有时对标记的解释需要来自解析器的输入,尤其是在C++0x中。例如,对字符序列>>的处理非常依赖于解析上下文。这两个工具对于解析C++来说是非常糟糕的选择,并且为了正确解析C++,您必须放入许多超出这些工具所依赖的基本框架的特殊情况。这将花费您很长时间,即使如此,您的解析器也可能会出现奇怪的错误。yacc和bison是LALR(1)解析器生成器,它们不够复杂,无法
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题吗?更新问题,以便editingthispost提供事实和引用来回答它.关闭9年前。Improvethisquestion我过去曾在各种项目中使用过lex和yacc(通常是bison),通常是翻译器(例如流式传输到EDA应用程序中的EDIF子集)。此外,我不得不支持基于lex/yacc语法的代码,这些语法可以追溯到几十年前。因此,尽管我不是专家,但我知道如何使用这些工具。我过去曾在各种论坛上看到过关于Antlr的正面评价,我很好奇我可能遗漏了什么。因此,如果您两者都使用过,请告诉我Antlr中哪个更好或更高级