草庐IT

java - 使用 ANTLR 的嵌套 boolean 表达式解析器

我正在尝试解析嵌套boolean表达式并分别获取表达式中的各个条件。例如,如果输入字符串是:(A=aORB=bORC=cAND((D=dANDE=e)OR(F=fANDG=g)))我想以正确的顺序获取条件。即,D=d和E=e或者F=f和G=g和A=a或B=b或C=c我正在使用ANTLR4来解析输入文本,这是我的语法:grammarSimpleBoolean;rule_set:nestedCondition*EOF;AND:'AND';OR:'OR';NOT:'NOT';TRUE:'TRUE';FALSE:'FALSE';GT:'>';GE:'>=';LT:'skip;nestedCon

java - 解析时ANTLR4相互左递归错误

我有这个ANTLR4语法:constantFixedExpresion:term(('+'|'-')term)+;term:factor(('*'|'//'|'REM')factor)+;factor:('+'|'-')*(wholeNumberConstant|constantFixedExpresion|'TOFIXED'(stringConstant|bitCodeConstant)|identifier)('FIT'constantFixedExpresion)*;我收到以下错误:error(119):LanguageA.g4:::Thefollowingsetsofrules

java - 在 Eclipse Luna (4.4) 上设置 ANTLR 4 IDE 时遇到问题

我正在尝试安装ANTLR4IDE在EclipseLuna(4.4)上。我已经从Marketplace安装了它,但我不知道如何创建一个包含ANTLR4Lexer/Parser的项目。当我去创建一个新项目时,我没有看到ANTLR4的任何选项。我尝试创建一个.g4文件,它在编辑器中打开,但是当我保存它时,它什么也没做。 最佳答案 我在互联网上环顾四周,找到了一些我拼凑起来的资源,并通过反复试验找到了解决方案。下面是我在我的一些机器上使用的指南,用于在Eclipse中设置ANTLR4IDE。我想我应该在这里分享它并为其他人省去Google搜

java - ANTLR:如何解释这种识别 Java 代码后缀的语法的行为?

一周前,我开始了以下项目:识别Java代码后缀的语法。我用的是官方ANTLRJava(Java.g4)的语法作为基线并开始添加一些规则。然而,这些新规则也引入了左递归,我也必须处理它。经过几天的工作,我得到了followingcode.当我开始测试时,我注意到了一些我仍然无法解释的异常情况。当给出输入{}解析器告诉我noviablealternativeatinput''但是当我切换规则右侧的终端顺序时s2,特别是如果我们将右手边从v2_1|v2_2|v2_3...更改为至v2_36|v2_1|v2_2...(终端v2_36移到第一个位置),序列{}被接受。我的第一个想法是Antlr不

python - ANTLR4 和 Python 目标

我在使用ANTLR4中的Python目标时遇到问题。可用的示例似乎很少,转到相应的Java代码似乎也不相关。我正在使用标准的Hello.g4语法://DefineagrammarcalledHellogrammarHello;r:'hello'ID;//matchkeywordhellofollowedbyanidentifierID:[a-z]+;//matchlower-caseidentifiersWS:[\t\r\n]+->skip;//skipspaces,tabs,newlines示例(从标准的Hello.g4示例构建):input_=antlr4.FileStream(_

java - 慢速 ANTLR4 在 Python 中生成解析器,但在 Java 中速度很快

我正在尝试转换antANTLR3grammar到ANTLR4grammar,以便将它与antlr4-python2-runtime一起使用。该语法是一个C/C++模糊解析器。转换后(基本上删除了树运算符和语义/句法谓词),我使用以下方法生成了Python2文件:java-jarantlr4.5-complete.jar-Dlanguage=Python2CPPGrammar.g4并且生成的代码没有任何错误,所以我将其导入到我的python项目(我使用的是PyCharm)中进行一些测试:importsys,timefromantlr4import*fromparser.CPPGramma

c# - 使用 ANTLR 3.3?

我正在尝试开始使用ANTLR和C#,但由于缺乏文档/教程,我发现它非常困难。我找到了一些针对旧版本的半心半意的教程,但似乎从那以后API发生了一些重大变化。谁能给我一个简单的例子,说明如何创建语法并在短程序中使用它?我终于设法将我的语法文件编译成词法分析器和解析器,并且我可以在VisualStudio中编译和运行它们(在不得不重新编译ANTLR源代码之后,因为C#二进制文件似乎也已过时!——更不用说源代码在没有一些修复的情况下无法编译),但我仍然不知道如何处理我的解析器/词法分析器类。据说它可以在给定一些输入的情况下生成AST...然后我应该可以用它做一些有趣的事情。

go - Antlr4 - 输入时没有可行的替代方案

我正在尝试创建一个简单的HOCON解析器(从现有的JSON解析器开始)。语法定义为:/**Takenfrom"TheDefinitiveANTLR4Reference"byTerenceParr*///Derivedfromhttp://json.orggrammarHOCON;hocon:value|pair;obj:object_beginpair(','?pair)*object_end|object_beginobject_end;pair:STRINGKV?value{fmt.Println("pairstr",$STRING.GetText())}|KEYKV?value{

python - 导入后ANTLR4语法标记识别错误

我正在使用parsergrammar和lexergrammar用于来自GitHub的antlr4以在Python3中解析PHP。当我直接使用这些语法时,我的PoC代码可以工作:antlr-test.pyfromantlr4import*#fromPHPParentLexerimportPHPParentLexer#fromPHPParentParserimportPHPParentParser#fromPHPParentParserimportPHPParentListenerfromPHPLexerimportPHPLexerasPHPParentLexerfromPHPParser

java - ANTLR4 访问者模式上的简单算术示例

我是一个完整的ANTLR4新手,所以请原谅我的无知。我遇到了thispresentation其中定义了一个非常简单的算术表达式语法。它看起来像:grammarExpressions;start:expr;expr:left=exprop=('*'|'/')right=expr#opExpr|left=exprop=('+'|'-')right=expr#opExpr|atom=INT#atomExpr;INT:('0'..'9')+;WS:[\t\r\n]+->skip;这很棒,因为它将生成一个非常简单的二叉树,可以使用幻灯片中解释的访问者模式进行遍历,例如,这是访问expr的函数:p