标签: yacc

使YACC输出AST(令牌树)

是否有可能使YACC(或者我是我的MPPG)输出抽象语法树(AST).

我正在阅读的所有内容都表明YACC很容易做到这一点,但是我很难知道你是如何知道何时在树中建立节点的时候.

syntax parsing yacc gppg

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

用于JavaScript的Yacc/Jay语法文件?

可能重复:
我在哪里可以找到ECMAscript/Actionscript/Javascript的yacc gammar

我正在尝试为Yacc找到JavaScript的语法文件(最好是Jay,但是因为Jay是Yacc克隆我应该没问题,因为我需要在.NET上实现它).

.net javascript compiler-construction parsing yacc

12
推荐指数
1
解决办法
4421
查看次数

寻找lex/yacc格式的Java语法

有没有人知道lex/yacc格式语法的在线存储库?我正在寻找一种Java语法来制作一个快速的源代码转换器.

谢谢!

编辑:我最好是寻找lex/yacc因为我想使用fslex/fsyacc尽可能少的语法重写.

java yacc lex

12
推荐指数
1
解决办法
5148
查看次数

GCC源代码中的C语法

我正在寻找GCC源代码中的C语法,更具体地说是yacc/bison形式的语法.

c grammar gcc yacc bison

12
推荐指数
6
解决办法
9531
查看次数

Python/YACC Lexer:Token优先级?

我正在尝试在语法中使用保留字:

reserved = {
   'if' : 'IF',
   'then' : 'THEN',
   'else' : 'ELSE',
   'while' : 'WHILE',
}

tokens = [
 'DEPT_CODE',
 'COURSE_NUMBER',
 'OR_CONJ',
 'ID',
] + list(reserved.values())

t_DEPT_CODE = r'[A-Z]{2,}'
t_COURSE_NUMBER  = r'[0-9]{4}'
t_OR_CONJ = r'or'

t_ignore = ' \t'

def t_ID(t):
 r'[a-zA-Z_][a-zA-Z_0-9]*'
 if t.value in reserved.values():
  t.type = reserved[t.value]
  return t
 return None
Run Code Online (Sandbox Code Playgroud)

但是,t_ID规则以某种方式吞下DEPT_CODE和OR_CONJ.我怎么能绕过这个?我希望那两个人比保留的词更优先.

python parsing nlp yacc

12
推荐指数
2
解决办法
2804
查看次数

使用lex/yacc替代品的原因?

大约每年一次,我必须开发或至少设计一个语法和解析器 - 这似乎是我工作生活的一个常数.

每次我面对这个任务,大约一年,我,相当一个lex/yacc(flex/bison resp.)的家伙,考虑或重新考虑普通lex/yacc的替代品,并在经过一些沉思和尝试之后回到普通的lex/yacc.

因为我在应用程序的中心有一个CORBA服务器,我可以用几乎所有语言编写的解析器调用,所以这次我看看

  • antlr4(Java)和antlr3(Java但其他语言有RT),
  • SableCC(Java),
  • Parse :: EBNF,Parse :: Yapp和Marpa(Perl),
  • 和SimpleParse(Python),

对我来说,带有antlrworks的串联antlr4看起来是最有希望的候选者,但是我还不确定花在进入它上面的时间最终会被摊销.


我必须开发的语法类似于SQL DDL(在结构方面,而不是在主题方面).

为什么任何替代方案都会使我的任务比使用普通lex/yacc更容易?

multilingual parsing yacc antlr lex

12
推荐指数
2
解决办法
3710
查看次数

是否有Yacc语法调试器?

我一直在帮助我公司内部增加一项二十年的专有语言.它是一种图灵完整的大型语言.将它翻译成另一种语法(如Antlr)不是一种选择(我不能做出决定).

在大多数情况下,扩展语法已经顺利进行.但每隔一段时间我就会得到减少减少或减少减少

  • 很难消除
  • 有时候只是没有意义(对我虚弱的大脑)

在经历了很多痛苦的盯着y.output文件和实验语法重构之后,我通常会到达我想去的地方.有时我不得不做出令人不满意的妥协.

那么,是否有任何工具可以吸收yacc语法,这可以增强浏览,试验和允许调试变更?

如果我添加一个产品,我希望看到的不仅仅是"到处使用的原子生产"(认为标识符)"与规则foo冲突"(是的,有更多的信息,s/r,r/r,比那个,但我认为你得到了我的漂移).除了戴上我的思维帽并试图想象一个符号堆栈和状态机之外,有一些相互影响的暗示会很好.

更新:我想我应该澄清一下.我们使用Berkeley Yacc.我一直在使用最新版本的Bison进行测试.对于输出,我用--report = itemset编译了语法.

我在这篇文章中的目标是寻找外部工具来增强 yacc附带的语法调试工具.今天使用默认设置很痛苦.帮助我找到更好的交互式工具,例如可以与Antlr一起使用的工具.

c++ debugging yacc visualizer

11
推荐指数
1
解决办法
1154
查看次数

试图为bison/wisent构建一个C#语法

我以前从未做过Bison或Wisent.
我该如何开始?

我的真正目标是为C#生成一个有效的Wisent/Semantic语法,允许在带有代码完成的emacs中编辑C#,以及所有其他CEDET好东西.(对于那些不知道是谁,野牛之是一个与Emacs口齿不清端口GNU野牛,这是纳入CEDET. 野牛之显然是欧洲野牛.野牛,我把它,是一出戏,对词的派生YACC.而CEDET是Emacs开发工具的集合.所有人都赶上了?我不打算尝试定义emacs.)

Microsoft在语言参考文档中为C#提供了BNF语法,包括所有LINQ扩展.我能够将其转换为成功编译的.wy文件semantic-grammar-create-package.

但编译后的语法并没有"起作用".在某些情况下,语法"查找" enum声明,但不是class声明.为什么?我不知道.我无法识别属性.我发现语法的"调试"并不容易.

我想我会退后一步,尝试为一种简单易懂的语言制作一个明智的语法,这种语言只有几个关键词.只是为了获得一些经验.即便如此,这也是一个挑战.

我已经看过关于语法fw的.info文档,并且很明智,但是......仍然有些东西并没有真正为我澄清,这些东西是如何真正起作用的.

所以

Q1:有关在emacs中调试明智语法的任何提示吗?有没有办法在语法上运行一个"类似lint"的东西来找出是否有未使用的规则,这样的死胡同?如何能够观察解析器的运行情况呢?有这样的吗?

Q2:关于加速野牛/一般情况的任何提示?我正在考虑的是一种工具,可以让我深入了解规则的运作方式.提供一些透明度的东西,而不是"我没有工作"的经验,我现在正在使用Wisent.

问题3:我应该放弃并成为一名有机农民,而不是继续打击这一点吗?


ps:我知道CEDET/semantic的contrib目录中现有的C#语法.这件事有效,但是......它不支持最新的C#规范,包括LINQ,部分类和方法,yield,匿名方法,对象初始化器等等.此外,它主要解析一堆C#代码.它嗅出了类和方法,然后挽救了.即使是foreach循环也没有做得很好.尽管它很好,但我希望看到它更好.我正在尝试做的是使它成为当前的,并且还扩展它以解析更多的C#代码.

c# emacs yacc bison

11
推荐指数
1
解决办法
1245
查看次数

Lex/Flex - 扫描EOF角色

其他人有我遇到的以下问题,但我找不到任何报告解决方案的人..让Flex发现EOF(文件结束).我需要Flex来查找EOF并返回一个令牌,表明它已找到它,这样它就可以告诉Yacc/Bison它已经到达输入源文件的末尾并且可以报告成功的解析.

请注意,这个问题此问题不同,因为这是关于Lex/Flex的.

任何帮助都是极好的.谢谢.

yacc lex bison flex-lexer

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

_Atomic类型说明符和限定符之间的C11语法歧义

我正在尝试根据N1570编写C11的lex/yacc语法.我的大部分语法都是从信息性语法摘要中逐字复制的,但是出现了一些yacc冲突.我设法解决了所有这些问题,除了一个:当'_Atomic'用作类型说明符和用作类型限定符时,似乎存在一些模糊性.

在说明符形式中,_Atomic紧跟着括号,所以我假设它与C的很少使用的语法有关,它允许声明符在括号中,从而允许括号立即跟随限定符.但我的语法已经知道如何区分typedef名称和其他标识符,所以yacc应该知道差异,不应该吗?

我不能为我的生活想到一个实际上是模棱两可的案例.

我怀疑它有帮助,但这是我使用yacc的-v标志时获得的相关状态输出."ATOMIC"显然是我的"_Atomic"的令牌名称

state 23

  152 atomic_type_specifier: ATOMIC . '(' type_name ')'
  156 type_qualifier: ATOMIC .

    '('  shift, and go to state 49

    '('       [reduce using rule 156 (type_qualifier)]
    $default  reduce using rule 156 (type_qualifier)
Run Code Online (Sandbox Code Playgroud)

c grammar yacc c11

11
推荐指数
2
解决办法
1766
查看次数