我似乎在AST->StringTemplate方面苦苦挣扎,可能是因为我来自手工编写解析器->LLVM。我正在寻找的是一种自动将解析规则与可以表示它的AST类匹配并包含生成目标语言输出的方法的方法。(在这种情况下可能使用StringTemplate。)在伪代码中,给出这个示例语法:numberExpression:DIGIT+;我想把它映射到这个AST类:classNumberExpressionASTextendsBaseAST{privatedoublevalue;publicNumberExpressionAST(node){this.value=node.value;}publ
如何使用ANTLR从javasrc代码生成AST?有帮助吗? 最佳答案 好的,下面是步骤:转到ANTLRsite并下载最新版本从here下载Java.g和JavaTreeParser.g文件.运行以下命令:java-jarantlrToolJava.gjava-jarantlrToolJavaTreeParser.g将生成5个文件:Java.tokensJavaLexer.javaJavaParser.javaJavaTreeParser.gJavaTreeParser.tokens使用此java代码生成抽象语法树并打印它:Stri
我正在尝试构建一个解析标记句子的ANTLR语法,例如:DTTheNPcatVBateDTaNPrat并有语法:fragmentTOKEN:(('A'..'Z')|('a'..'z'))+;fragmentWS:(''|'\t')+;WSX:WS;DTTOK:('DT'WSTOKEN);NPTOK:('NP'WSTOKEN);nounPhrase:(DTTOKWSXNPTOK);chunker:nounPhrase{System.out.println("chunkfound"+"("+$nounPhrase+")");};语法生成器在最后一行生成“规则范围内缺少属性访问:nounPhr
我在项目中使用Antlrv3和java,在AntlrWorks中一切顺利,但是当我切换到AntlrIDE(eclipse的插件)时,解释器无法匹配我写的句子,告诉我不匹配。在我看来,它无法识别我在词法分析器中指定的要跳过的单词列表。然而,它在AntlrWorks中完美运行是一样的。有什么建议吗?我已经在eclipse中设置了antlr构建器:AntlrParserGeneratorv3.4 最佳答案 这可能是配置问题。我在让一切正常工作时遇到了一些困难,所以找不到任何一个地方来说明如何做到这一点,我写了自己的文档。希望这可以帮助。如
我正在尝试解析(在Java中)维基百科上的维基媒体标记。有许多现有的包可以完成这项任务,但我还没有找到特别适合我需要的包。我用过的最好的包是MathclipseBlikiparser,它在大多数页面上都做得不错。然而,这个解析器是不完整的,无法解析某些页面或在其他页面上解析不正确。遗憾的是,代码相当困惑,因此修复此解析引擎中的问题非常耗时且容易出错。为了寻找更好的解析引擎,我调查了使用基于EBNF的解析器来完成此任务(特别是ANTLR)。然而,经过一些尝试后,这种方法似乎并不特别适合这项任务,因为维基媒体标记相对宽松,因此不容易适应结构化语法。然而,我在ANTLR和类似解析器方面的经验
如何匹配ANTLRv4中的任意文本?我的意思是文本,在编写语法时是未知的?我的语法如下:grammarAnytext;line:comment;comment:'#'anytext;anytext:ANY*;WS:[\t\r\n]+;ANY:.;我的代码如下:Stringline="#This_is_a_comment";ANTLRInputStreaminput=newANTLRInputStream(line);AnytextLexerlexer=newAnytextLexer(input);CommonTokenStreamtokens=newCommonTokenStream(
有没有人有使用ANTLR语法文件和Java源代码来分析Java源代码的完整实现(可能是github或googlecode)。例如,我希望能够简单地计算变量、方法等的数量。同时使用最新版本的ANTLR。 最佳答案 我想我会在午休时间尝试一下这个。这可能无法完全解决您的问题,但可以为您提供一个起点。该示例假定您在同一目录中执行所有操作。下载ANTLRsource来自GitHub。来自ANTLR站点的预编译“完整”JAR包含一个已知错误。GitHub存储库有修复。提取ANTLR压缩包。%tarxzfantlr-antlr3-release
我已经创建了新的Gradle项目,添加了applyplugin:'antlr'和dependencies{antlr"org.antlr:antlr4:4.5.3"到build.gradle。创建了包含以下内容的src/main/antlr/test.g4文件grammartest;r:'hello'ID;ID:[a-z]+;WS:[\t\r\n]+->skip;但它不起作用。没有生成java源文件(也没有发生错误)。我错过了什么?项目在这里:https://github.com/dims12/AntlrGradlePluginTest2更新我发现我的示例确实有效,但它把代码放入了\b
我正在尝试将AST与ANTLR4一起使用,并使用以下文件:生成器.javaimportorg.antlr.v4.runtime.ANTLRInputStream;importorg.antlr.v4.runtime.CharStream;importorg.antlr.v4.runtime.CommonTokenStream;importorg.antlr.v4.runtime.TokenStream;publicclassBuilder{publicstaticvoidmain(String[]args){CharStreaminput=newANTLRInputStream("ON
我正在使用antlr将自定义语言翻译成C++代码。在这种语言中,用户可以在$code...$endcode指令之间嵌入C++代码片段,这些片段将按原样插入到翻译后的C++代码中。我有以下问题:当代码片段中有错误时,我希望编译器指向源文件而不是翻译后的C++代码。我试过如下使用行指令,但没有用:"foo.custom_laguage"1$code2...somec++code...3$endcode被翻译成"auto-generated.cpp"42#line2"foo.custom_language"43...somec++code...44#line__LINE____FILE__这