标签: antlr3

ANTLR:有一个简单的例子吗?

我想开始使用ANTLR,但是在antlr.org网站上花了几个小时回顾一下这些例子之后,我仍然无法清楚地理解Java进程的语法.

是否有一些简单的例子,比如使用ANTLR实现的四操作计算器,通过解析器定义并一直到Java源代码?

java antlr antlr3 antlr4

223
推荐指数
3
解决办法
13万
查看次数

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

使用cmake的autotools构建库

这是我对cmake的第一次尝试,如果可能的话,我希望有一些关于我做了什么的反馈,因为一些问题仍然存在.

在库文件夹的CMakeLists.txt中,我创建了两个makefile目标:configure-antlr3cantlr3c.第一个目标运行autotools配置shell脚本,第二个目标运行make可执行文件来构建库:

# CMakeLists.txt in libantlr3c-3.1.3 
add_custom_target(
  configure-antlr3c
  ${SHELL_EXECUTABLE} configure
  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)

add_custom_target(
  antlr3c
   ${MAKE}
   DEPENDS configure-antlr3c
   WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
Run Code Online (Sandbox Code Playgroud)

主要问题是configure-antlr3c目标总是"过时",因此即使没有发生任何变化也会始终执行.此外,我一定需要在一个单独的目录中生成我的cmake makefile(不在我的项目的根目录中),以避免覆盖库的autotools Makefile ...

有谁有这个问题(用cmake构建autotools项目)?如果是这样,你的解决方案是什么?

谢谢.

编辑:解决方案 在根CMakeLists.txt中:

include(ExternalProject)
ExternalProject_Add(
  libantlr3c
  SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib/libantlr3c-3.1.3
  CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/lib/libantlr3c-3.1.3/configure --prefix=${CMAKE_CURRENT_SOURCE_DIR}/lib/libantlr3c-3.1.3
  PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/lib/libantlr3c-3.1.3
  BUILD_COMMAND make
  BUILD_IN_SOURCE 1
)
Run Code Online (Sandbox Code Playgroud)

build-automation build-process autotools cmake antlr3

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

Scala解析器组合器与ANTLR/Java生成的解析器?

我正在为一个主要用Scala编写的应用程序编写表达式解析器.我在Scala中构建了AST对象,现在需要编写解析器.我听说过Scala的内置解析器组合器,以及ANTLR3,我想知道:哪个可以提供更好的性能和编写代码的简易性?至今:

ANTLR专业人士

  1. 知名
  2. 快速
  3. 外部DSL
  4. ANTLRWorks(用于解析器语法调试/测试的出色IDE)

ANTLR缺点

  1. 基于Java(Scala互操作可能具有挑战性,任何经验?)
  2. 在运行时需要很大的依赖关系

Parser combinator专业人士

  1. Scala的一部分
  2. 少一个构建步骤
  3. 不需要运行时依赖; 例如,已经包含在Scala的运行时库中

解析器组合器缺点

  1. 内部DSL(可能意味着执行速度较慢?)
  2. 没有ANTLRWorks(提供很好的解析器测试和可视化功能)

有什么想法吗?

编辑:此表达式解析器解析代数/微积分表达式.它将在最终确定的Android应用程序Magnificalc中使用.

java parsing scala parser-combinators antlr3

25
推荐指数
2
解决办法
5115
查看次数

如何匹配字符串,但不区分大小写?

假设我想匹配"啤酒",但不关心区分大小写.

目前我正在定义一个令牌('b'|'B''e'|'E''e'|'E''r'|'R')但我有很多这样的但不是真的想要处理'verilythisisaverylongtokenindeedomyyesitis'.

antlr wiki 似乎暗示它无法完成(在antlr中)...但我只是想知道是否有人有一些聪明的技巧......

antlr antlr3

19
推荐指数
4
解决办法
8181
查看次数

Xtext可以用于解析通用编程语言吗?

我目前正在开发一种基于代理的通用编程语言(它的语法将受到Java的启发,我们也使用这种语言的对象).

自项目开始以来,我们怀疑使用ANTLRXtext的事实.那时我们发现Xtext正在实现ANTLR功能的一个子集.所以我们决定在我们的语言中使用ANLTR,失去了为我们的语言免费提供一个完整的Eclipse编辑器的可能性(这是Xtext提供的一个很好的功能).

然而,据我所知,今年夏天Xtext项目向前迈出了大步.引用链接:

Xtext有什么限制?

Sven:您可以使用Xtext实现几乎任何类型的编程语言或DSL.有一个例外,那就是如果你需要使用所谓的"语义谓词",这是一个相当复杂的事情我不认为值得在这里解释.很少有语言真正需要这个概念.然而,突出的例子是C/C++.我们想在下一个版本中查看该主题.

Xtext文档中也强调了这一点:

什么是Xtext?无论您是想创建一个小的文本域特定语言(DSL),还是想要实现一个完整的通用编程语言.使用Xtext,您可以快速创建自己的语言.此外,如果您已经拥有现有语言但缺乏合适的工具支持,则可以使用Xtext创建复杂的基于Eclipse的开发环境,从而在极短的时间内提供现代Java IDE所知的编辑体验.我们称Xtext为语言开发框架.

如果Xtext已经摆脱了过去的限制,为什么仍然无法为最着名的编程语言(Java,C#等)找到复杂的Xtext语法?

在ANTLR网站上,您可以找到大量这样的语法示例,对于Xtext而言,我能够找到的唯一示例是文档中报告的示例.也许Xtext仍然不成熟,无法用于实现通用编程语言?我有点担心这个...我不会开始在Xtext中重写语法,然后才能认识到它不适合那个.

parsing antlr xtext antlr3

19
推荐指数
1
解决办法
7249
查看次数

是否有任何用于功能语言的LL解析器生成器,如Haskell或Scala?

我注意到明显缺乏LL解析器,它们在函数式语言中创建解析器.对于我一直在寻找没有成功的东西的理想发现是为ANTLR样式的LL(*)语法生成Haskell解析器(模式的重新格式化模式),并且惊讶于每个最后的解析器生成器都具有功能我找到的语言目标是某种LR解析器.

我想将我正在研究的这种语言的解析器从ANTLR转换为语言本身的自托管,如果我能用其他函数式语言输入几乎肯定正确的语言,它会有很大的帮助. (最好是我熟悉的,Haskell和Scala),而不是必须从头开始重写它,尽管最后我可能会这样做,因为核心语言很小.

在这一点上,甚至对此的解决方案甚至比我更好奇为什么没有这样的LL(*)甚至LL(k)解析器生成器,但是许多LR生成器,因为LL本身就更容易.

haskell functional-programming scala parser-generator antlr3

18
推荐指数
2
解决办法
2806
查看次数

如何解决Antlr3依赖地狱

我有一个带有MEF和RavenBD的asp.net MVC 4项目.

当项目加载时,它会抛出此异常:无法加载文件或程序集Antlr3.Runtime.dll

我发现RavenDB和WebGrease(与MVC 4一起安装)都使用Antlr3.但WebGrease附带了自己的Antlr3 dll,由微软签署 - PublicKeyToken 31bf3856ad364e35

Antlr3默认的PublicKeyToken是eb42632606e9261f.

RavenDB和WebGrease使用相同版本的Antlr3 3.3.1.7705

我该如何解决这个问题?

bundle antlr3 asp.net-mvc-4 bundling-and-minification asp.net-optimization

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

否定词法分析器和解析器规则

如何~在ANTLR的词法分析器和解析器规则中使用否定元字符?

antlr parser-generator antlr3

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

为什么antlr3 c#解析器方法是私有的?

我正在构建一个antlr中的解析器,它可以编译成一个可用的java目标.当我重新定位c#2时,它产生一个解析器,其中所有的解析方法都是私有的,但标有[GrammarRule("rulename")]属性.

实际调用解析器的批准方法是什么?

我正在使用ANTLR 3.3 2010年11月30日12:45:30

谢谢,安迪

c# antlr antlr3

14
推荐指数
1
解决办法
1395
查看次数