相关疑难解决方法(0)

GCC和Clang解析器真的是手写的吗?

似乎GCC和LLVM-Clang使用手写递归下降解析器,而不是机器生成,基于Bison-Flex,自下而上解析.

请问有人请确认是这种情况吗?如果是这样,为什么主流编译器框架使用手写解析器?

更新:这里有关此主题的有趣博客

c compiler-construction parsing compilation

84
推荐指数
5
解决办法
3万
查看次数

在哪里可以学习编写词法分析器的基础知识?

我想学习如何写一个词法分析器.我的大学课程有一个任务,我们必须编写一个解析器(和一个词法分析器一起使用),但这是给我们的,没有任何指示或反馈(超出标记),所以我并没有真正从中学到很多东西.

在搜索了这个主题之后,我只能找到相当高级的写作,这些写作集中在我觉得比我所处的位置提前几步的区域.我想讨论为一种非常简单的语言编写词法分析器的基础知识,我可以将其作为研究更复杂语言标记的基础.

在这个阶段,我并不是对最佳实践或优化技术感兴趣,而是更喜欢专注于基本要素.有什么好的资源让我入门?

language-agnostic compiler-construction lexer

69
推荐指数
2
解决办法
3万
查看次数

示例解析器,以了解如何编写它们

我正在寻找可以进行研究的解析器和/或解析器生成器的源代码,以便进一步发展,我在学校课程中获得的技能.你知道任何类型的推荐解析器吗?

language-agnostic parsing

41
推荐指数
4
解决办法
4万
查看次数

在Java中解析算术表达式并从中构建树

给定一个算术表达式,我需要一些创建自定义树的帮助.比如说,您输入此算术表达式:

(5+2)*7
Run Code Online (Sandbox Code Playgroud)

结果树应如下所示:

    *
   / \
  +   7
 / \
5   2
Run Code Online (Sandbox Code Playgroud)

我有一些自定义类来表示不同类型的节点,即PlusOp,LeafInt等.我不需要评估表达式,只需创建树,所以我可以在以后执行其他功能.此外,否定运算符' - '只能有一个子节点,并且要表示'5-2',您必须将其输入为5 +( - 2).

需要对表达式进行一些验证,以确保每种类型的运算符都具有正确的no.参数/儿童,每个开口括号都附有一个结束括号.

另外,我应该提一下,我的朋友已经编写了将输入字符串转换为一堆标记的代码,如果这对此有帮助的话.

我会感激任何帮助.谢谢 :)

(我读过你可以编写一个语法并使用antlr/JavaCC等来创建解析树,但我不熟悉这些工具或编写语法,所以如果这是你的解决方案,我将不胜感激,如果你可以为他们提供一些有用的教程/链接.)

java tree parsing

38
推荐指数
3
解决办法
6万
查看次数

使用标记列表构造抽象语法树

我想从一个令牌列表中构造一个AST.我正在编写脚本语言,我已经完成了词法分析部分,但我不知道如何创建AST.所以问题是,我该怎么做这样的事情:

WORD, int
WORD, x
SYMBOL, =
NUMBER, 5
SYMBOL, ;
Run Code Online (Sandbox Code Playgroud)

并将其转换为抽象语法树?最好,我想在没有像ANTLR之类的库那样的情况下这样做,我宁愿自己尝试从头开始.但是,如果这是一项非常复杂的任务,我不介意使用库:)谢谢

java interpreter abstract-syntax-tree

36
推荐指数
1
解决办法
2万
查看次数

使用Javascript编写解析器的教程

我见过几种基于Javascript构建的语言(即CoffeeScriptLessCSS).

有没有教程可以用Javascript编写语言/解析器?

javascript parsing

33
推荐指数
2
解决办法
1万
查看次数

c ++中的布尔表达式(语法)解析器

我想解析一个布尔表达式(在C++中).输入表格:

a and b xor (c and d or a and b);
Run Code Online (Sandbox Code Playgroud)

我只想将这个表达式解析为树,知道优先级规则(不是,和,xor,或).所以上面的表达式应该类似于:

(a and b) xor ((c and d) or (a and b));
Run Code Online (Sandbox Code Playgroud)

到解析器.

树将是以下形式:

                        a
                   and
                        b
               or
                        c
                   and
                        d
        xor
                   a
              and
                   b
Run Code Online (Sandbox Code Playgroud)

输入将通过命令行或以字符串的形式.我只需要解析器.

有没有可以帮助我做到这一点的消息来源?

c++ parsing boost-spirit

32
推荐指数
2
解决办法
2万
查看次数

Lex和Yacc在PHP中

在PHP中是否有Lex和Yacc的实现?

如果没有,任何人都可以建议一个词法分析器和解析器生成器(即Lex和Yacc之类的东西)来创建PHP代码.我不太担心生成的解析器的性能.

我厌倦了使用正则表达式解析真正不应该用正则表达式解析的东西......

php yacc lex parser-generator

30
推荐指数
1
解决办法
1万
查看次数

PHP中正则表达式的解析器?

我需要在PHP中将正则表达式解析为它们的组件.我创建正则表达式或执行它们没有问题,但我想显示有关正则表达式的信息(例如列出捕获组,将重复字符附加到它们的目标,......).整个项目是WordPress的一个插件,它提供了有关重写规则的信息,这些规则是具有替换模式的正则表达式,并且可能很难理解.

我自己写了一个简单的实现,它似乎处理我抛出的简单正则表达式并将它们转换为语法树.在我扩展这个例子以支持更多op的正则表达式语法之前,我想知道是否还有其他好的实现我可以看一下.实现语言并不重要.我假设大多数解析器都是为了优化匹配速度而编写的,但这对我来说并不重要,甚至可能会妨碍清晰度.

php regex parsing abstract-syntax-tree

22
推荐指数
3
解决办法
2669
查看次数

编写一个简单的方程解析器

将使用哪种算法来实现此目的(例如,这是一个字符串,我想找到答案):

((5 + (3 + (7 * 2))) - (8 * 9)) / 72
Run Code Online (Sandbox Code Playgroud)

如果有人写到,我怎么能处理这么多嵌套的括号?

c++ algorithm parsing

16
推荐指数
2
解决办法
1万
查看次数