首页 文章
  • 124 votes
     answers
     views

    Antlr的优点(相比之下,lex / yacc / bison)[关闭]

    我过去曾经使用过lex和yacc(更常见的是bison)用于各种项目,通常是翻译(例如EDIF的子集流入EDA应用程序) . 另外,我必须支持基于几十年前的lex / yacc语法的代码 . 所以我知道我的工具,虽然我不是专家 . 我在过去的各种论坛上看过关于Antlr的积极评论,我很好奇我可能会缺少什么 . 因此,如果您同时使用了两者,请告诉我Antlr中哪些更好或更先进 . 我目前的限制是我在...
  • 7 votes
     answers
     views

    Flex和Yacc - 找不到 - lfl?

    嗨,我正在学习Lex和yacc . 我创建了以下lex程序 . %{ #include <stdio.h> %} %% [0123456789]+ printf("NUMBER\n"); [a-zA-Z][a-zA-Z0-9]* printf("WORD\n"); %% 我正在尝试使用以下命令运行它: lex e...
  • 10 votes
     answers
     views

    解决yacc / ocamlyacc中减少/减少冲突的问题

    我正在尝试解析ocamlyacc中的语法(几乎与常规yacc相同),它支持没有运算符的函数应用程序(如Ocaml或Haskell),以及二进制和一元运算符的常规分类 . 我正在使用' - '运算符进行减少/减少冲突,它可以用于减法和否定 . 这是我正在使用的语法示例: %token <int> INT %token <string> ID %token MINUS %st...
  • 1 votes
     answers
     views

    野牛/ yacc语法消歧

    我遵循野牛语法(作为更复杂的语法的一部分): `` expression: IDENTIFIER | CONST | LAMBDA match_block ; match_block: pattern '=' expression | match_block '|' pattern '=' expression ; pattern: IDENTIFI...
  • 3 votes
     answers
     views

    如何解决转移/减少冲突迫使转变或减少?

    当Yacc / Bison发生转移/减少冲突时,是否可以强制解决冲突?换句话说:是否有可能明确强制它优先考虑转变或减少? 对于我所读到的内容,如果您对默认分辨率感到满意,可以告诉发生器not complain about it . 我真的不喜欢这个,因为它混淆了你理性的选择 . 另一种选择是重写语法来解决问题 . 我不知道这是否总是可行的,而且往往这使得理解起来更加困难 . 最后,我已经阅读了优先...
  • 0 votes
     answers
     views

    Bison / Yacc减少了特定语法示例的冲突

    我的编译器类有一个解析器项目 . 我无法解决其中一条规则的减少/减少冲突 . 此链接中提供了此语法规则的图形表示(抱歉,由于stackoverflow策略,我无法在此处发布图像): Graphical representation of the "type" grammar rule 所有椭圆形都是终端符号 . 由于这条规则看起来有点复杂,我试图把它分解成更小的部分 . 这是我...
  • 0 votes
     answers
     views

    减少/减少与无类型变量和函数调用的冲突

    我想为动态类型语言创建一个解析器 . 在我的野牛文件中,我有 runtimetyped 的规则,这是一个变量名或函数调用 . runtimetyped : T_ID { $$ = create_identifier($1); } | call { $$ = $1; } ; 我还想在编译时进行一些基本的类型检查 . F.E.我不想允许这样的事情...
  • 0 votes
     answers
     views

    自定义编程语言的无上下文语法

    在我的大学完成编译器设计课程后,我一直在为一个简单的编程语言编写一个编译器,但是我在使用解析器时遇到了麻烦 . 我正在使用mosml编译器并使用其内置解析器mosmlyac构建解析器 . 以下是我的解析器的摘录,显示了语法和关联性优先级 . ... %right ASSIGN %left OR %left AND %nonassoc NOT %left EQUAL LESS %left PLUS ...
  • 0 votes
     answers
     views

    使用空格分隔表达式列表解决bison语法中的冲突if / then / else

    我有以下yacc / bison / happy语法: %token if TokenIf then TokenThen else TokenElse true TokenTrue false TokenFalse %left APP %right IF %% ...
  • 10 votes
     answers
     views

    Lex / Flex - 扫描EOF角色

    其他人有我遇到的以下问题,但我找不到任何报告解决方案的人..让Flex发现EOF(文件结束) . 我需要Flex来查找EOF并返回一个令牌,表明它已找到它,这样它就可以告诉Yacc / Bison它已经到达输入源文件的末尾并且可以报告成功的解析 . 请注意this question与此不同,因为这与Lex / Flex有关 . 任何帮助都是极好的 . 谢谢 .
  • 0 votes
     answers
     views

    无法通过yacc和lex解析数字

    我已经完成了我的lex文件并开始学习yacc,但我对我的lex代码有一些疑问: %{ #include "y.tab.h" int num_lines = 1; int comment_mode=0; int stack =0; %} digit ([0-9]) integer ({digit}+) float_num ({digit}+\.{digit}+) %% {inte...
  • 0 votes
     answers
     views

    如何使用lex / yacc构建解析器来定义c中的变量

    嗨,我是lex / yacc的新手,我正在练习实现一个解析器来定义一组变量,比如int x,y,z;双a,b; char c . 我需要为变量分配一个常量值,并管理字符常量以及打印所有变量及其类型和值 . 我有一些在线编码,我编辑但总是遇到错误 . 如果有人可以帮助我 . lex代码(calc.l) %{ #include "y.tab.h" %} %% "print...
  • 0 votes
     answers
     views

    如何从函数调用中删除逗号和括号

    在使用快乐解析器编写的函数式语言编译器中,与yacc / bison非常相似,我使用以下规则实现了列表并列出了一些核心函数 map , concat 和 filter : Exp: ... | concat '(' Exp ',' Exp ')' { Concat $3 $5 } | map '(' Exp ',' Exp ')' { Map $3 $5 } ...

热门问题