问题标签 [lex]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - PHP 中的 Lex 和 Yacc
PHP 中有 Lex 和 Yacc 的实现吗?
如果没有,任何人都可以建议一个词法分析器和解析器生成器(即,任何像 Lex 和 Yacc 之类的东西)来创建 PHP 代码。我不太担心生成的解析器的性能。
我厌倦了使用正则表达式来解析真正不应该用正则表达式解析的东西......
bison - 在哪里可以找到关于 flex 和 bison 的真实示例?
我需要一个关于 flex 和 bison 的例子,所以我可以学习如何构建 ast 树和符号表并进行语义分析
emacs - lex/flex/yacc/bison 文件有没有好的 Emacs 模式或方法?
用 Emacs 编辑 lex 或 yacc 文件很麻烦:如果我使用 C 模式,缩进会出错,如果我不使用 C 模式,我就不能使用缩进。有没有人有技巧、方法或编辑模式来解决它?
c++ - 有没有比 lex/flex 更好(更现代)的工具来为 C++ 生成标记器?
我最近将源文件解析添加到现有工具中,该工具从复杂的命令行参数生成输出文件。
命令行参数变得如此复杂,以至于我们开始允许将它们作为一个文件提供,该文件被解析为一个非常大的命令行,但语法仍然很笨拙。所以我添加了使用更合理的语法解析源文件的能力。
我使用 flex 2.5.4 for windows 来为这种自定义源文件格式生成标记器,它工作正常。但我讨厌代码。全局变量、奇怪的命名约定以及它生成的 c++ 代码非常糟糕。现有的代码生成后端粘在 flex 的输出上——我不使用 yacc 或 bison。
我即将深入研究该代码,并且我想使用更好/更现代的工具。有谁知道那件事。
- 在 Windows 命令提示符下运行(Visual Studio 集成没问题,但我使用 make 文件构建)
- 生成适当封装的 C++ 标记器。(没有全局变量)
- 使用正则表达式来描述标记化规则(与 lex 语法兼容)
- 不强迫我使用 c-runtime(或伪造它)进行文件读取。(从内存中解析)
- 当我的规则强制标记器回溯(或自动修复它)时警告我
- 让我完全控制变量和方法名称(这样我就可以符合我现有的命名约定)
- 允许我将多个解析器链接到单个 .exe 中而不会发生名称冲突
- 如果我愿意,可以生成一个 UNICODE(16 位 UCS-2)解析器
- 不是集成标记器 + 解析器生成器(我想要 lex 替换,而不是 lex+yacc 替换)
如果这是唯一可用的工具,我可能会使用刚刚生成标记表的工具。
c - 是否有在 Lex/Yacc 解析中捕获错误的经验法则?
我们是否应该尽早(在 Lex 中)解析通用语言时发现错误,或者在哪里更方便并为我们提供更多信息(在 Yacc 中)?各种语言如何解决这个问题?
c - 无法识别 Lex 中的单行注释
在这个过程中学习 lex,我正在为 C 语言生成标记,并试图识别单行注释“//”,但与除法运算符有冲突
但是,当我运行示例并输入 // 时,它会将它们识别为 2 个除法运算符。我应该在哪里修改代码。有什么建议么。
编辑:
法典代码:
以下是我使用的头文件
以下是正在运行的输入,
运行它时,会消耗注释,甚至忽略除法运算符。但是检查当我输入 p 时,它会对上面列出的运算符进行分类,这是不应该做的。
f# - lex/yacc 和 fslex/fsyacc 有什么区别?
我正在学习 F#,因为我想编写一个词法分析器和解析器。我对这种处理有一点经验,但真的需要像 F# 一样正确地学习它。
在学习 F# 的词法/解析功能时,学习 lex 和 yacc 是否足够?
或者是否有一些差异意味着 lex/yacc 的代码不适用于 fslex 和 fsyacc?
regex - lex(flex)生成的程序不解析整个输入
我有一个相对简单的 lex/flex 文件,并且一直在使用 flex 的调试标志运行它,以确保它正确地标记化。不幸的是,我总是遇到两个问题之一 - 要么是 flex 生成的程序在几个令牌之后默默地放弃,要么我用来识别字符和字符串的规则没有被调用,默认规则而是调用。
有人可以指出我正确的方向吗?我附上了我的 flex 文件和示例输入/输出。
编辑:我发现生成的词法分析器在特定规则后停止:“cdr”。这更详细,但也更令人困惑。我发布了一个简短的修改过的 lex 文件。
样本输入:
通过生成的解析器运行输入的完整输出:
有什么想法吗?生成的程序输入一半就放弃了!(作为参考,我通过将文件的内容重定向到生成的程序来进行输入)。
types - flex中数据类型的问题
我有个问题。
我正在使用 flex 编写程序,并且正在使用以下代码:
此代码适用于我的数据类型。
我想评估下一行: expresion SUM expresion 其中 SUM 是评估的运算总和,例如 69 + 60
当我写这个
我有下一个错误
../src/buggy.y:350.37-38: $1 de `expresion' no tiene Tipo declarado
../src/buggy.y:351.28-29: $1 de `expresion' no tiene tipo declarado
buggy.tab.c:在函数“yyparse”中:
buggy.tab.c:1646:警告:函数'yylex'的隐式声明</p>
../src/buggy.y:在顶层:
lex.yy.c:1577:警告:“yyunput”已定义但未使用
lex.yy.c:1618:**警告:“输入”已定义但未使用
Leyendo fichero '../docs/prog1.bgy'。
问题是什么?
谢谢!
再见!!
yacc - 获取多个成员的类型
我正在使用 Yacc/Flex 编写程序,并且正在使用以下代码(不完全相同,因为我正在混合来自其他文件的代码):
然后,如果我写这样的东西:
bar正确获取数据类型INTEGER,但如果我有这个:
如何分别获取第一个和第二个成员的yylval.type?
非常感谢!