首页 > TAG信息列表 > Antlr4

如何用 ANTLR4 注入动作生成 symbol table

什么是 semantic actions 当 Parser 处理输入的代码的时候不仅要判断是否语法和句法都正确,还可以执行一些有用的操作,这些操作就叫做 Semantic actions。其实也就是一段代码,一般嵌入在在语法文件的规则里面。那么当 parser 应用这个规则的时候就会执行你设置的这段代码。换个角度理

Antlr一个领域语言利器——入门篇

  Antlr(Another Tool for Language Recognition)为开源的语法分析器,可以将输入的内容自动生成语法树;开发者可以使用它自定义自己的领域语言,只需创建语法规则文件,使用Antlr根据该规则文件生成相对应的类,再这些类的基础上我们可以用于实现自己的功能;Antlr4为Antlr的最新版本目前看

Antlr4+python3安装&示例程序+C++版本(VS) 2018-12-21

文章目录 安装Ubuntu安装Windows安装 使用g4部分python部分 示例:Visitor实现四则运算的计算C++版本官方demo创建自己的项目ANTLR的lib生成LIB介绍LIB创建LIB使用-引用LIB使用-复制LIB文件ANTLR的lib生成 安装 Ubuntu安装 安装方法:(来自官网首页,Quick Start) $ cd /usr/lo

03-编译小Parser

可以使用很多工具编译之,因为我们的运行时库是VS构建的,为了不出问题也为了操作简单,仍旧使用VS建立项目。 建立工程 创建一个TestL的Cpp空项目,并将Cpp文件复制到工程文件中去。注意只要cpp和h文件就可以,其他的辅助文件不需要。然后将所有的文件添加到工程中。 新建一个main.cpp

antlr4安装

antlr4 官方使用说明参考: https://github.com/antlr/antlr4/blob/master/doc/getting-started.md 环境Win10: 1.JDK安装(Java1.7或者更高) 2.antlr下载 全部antlr版本下载:https://www.antlr.org/download/ 此刻最新版:antlr-4.9.2-complete.jar 下载后保存到第三方Java库的目录,

跨模式共享规则

我想写一个具有多种模式的词法分析器.但是这些模式大部分相似.唯一的区别是,我用不同的名称引用了相同的字符.我有它的工作,问题是我必须复制整个词法分析器,更改所有名称,添加类型,并为每种模式添加一行. 这是我要解决的一般问题.我希望逗号在'[”]’之外具有较高的优先级.我希望

令牌流在ANTLR解析器C#实现中不存在

我目前正在关注“权威ANTLR 4参考”的“使用侦听器构建翻译器”教程,但是我正在使用C#并将示例转换为C#. 但是,我陷入了“ TokenStream”类型的变量声明,在C#中似乎缺少了它(我在任何地方都找不到它).教程Java代码说 TokenStream tokens = parser.getTokenStream(); 除了C#中缺少

Java-Antlr4简化数学表达式

我正在开发一个项目,以使用antlr4创建程序来简化数学表达式. 例如: x^2 + 2SQRT4 * 8 + x^2 –> 2x^2 + 16SQRT4 我已经创建了语法: grammar Short INT :[0-9]+; POW :'^'; NL :'\n'; WS :[ \t\r]+ -> skip; ID :[a-zA-Z_][a-zA-Z_0-9]*; PLUS :'+'; EQUALS

java-如何在ANTLR的语法规则中处理歧义标记?

规范人名后,我有以下语法来解析人名. exp : fullName EOF; fullName : title? f=name m=name? l=name; title: TITLE; name : NAME; TITLE : 'mr'| 'mrs' | 'ms'; NAME : ('a'..'z')+; WHITESPACE : ('\t' | ' '

java-Antlr4如何检测无法识别的令牌并且给定的句子无效

我正在尝试与Antlr合作开发一种新语言.这是我的语法文件: grammar test; program : vr'.' to'.' e ; e: be | be'.' top'.' be ; be: 'fg' | 'fs' | 'mc' ; to: 'n' | 'a' |

java-导入使用不同模式的ANTLR4 lexer语法

我正在尝试将词法分析器语法导入另一个词法分析器语法. 导入的语法使用不同的模式(在XMLLexer示例模式INSIDE和PROC_INSTR中). lexer grammar HTMLLexer; import XMLLexer; 编译时出现错误,未定义与模式名称相对应的变量. 作为一个具体示例,我在XMLLexer之上定义了HTMLLexer(来自

android-“ smali”语法规范| smali原木注射

是否有适用于smali代码的语法规范?我正在尝试使用smali代码,而我想念的一件事是,smali中的某些方法具有.prologue部分,而有些则没有.不幸的是wiki似乎没有关于smali语法的信息.以前有没有人发现自己处于这种情况?任何建议/解决方案将不胜感激. EDIT1:我的目标是将日志消息添加到应用程

java-如何为ANTLR中的歧义输入生成多个分析树

我面临一个模棱两可的情况,其中可以使用不同的规则来解析输入字符串,我需要考虑这两个选项并为其生成多个解析树. 为了简单起见,考虑一个人的名字,例如“ Alber Johanson”,这个名字可以被解析为 (fullName (firstName Alber) (lastName Johanson)) 或解析为 (fullName (firstN

java-如何强制ANTLR解析所有输入CharStream

我正在使用ANTLR4解析语法文件.当我使用BaseErrorListener来检测错误时,出现了问题.当面对非法输入字符串时,ANTLR自动匹配相应的分支,然后忽略后续的字符流,即使其中包含错误.我想检测该错误.这是我的g4文件和java文件.   TransitionLexer是我的词法分析器文件,TransitionCondit

java-ANTLR-不匹配的输入错误

我有一个语法,看起来像这样,由特定语言的注释和控制语句组成: 语法: grammar DD; ddlist: (ddstmt| jclcomment)+; ddstmt: dd1 | dd2 | dd3 | dd4 ; dd1: JCLBEGIN ddname DDWORD 'DUMMY'; dd2: JCLBEGIN ddname DDWORD 'DYNAM'; dd3: JCLBEGIN ddname DDWOR

java – 使用ANTLR的嵌套布尔表达式解析器

我正在尝试解析嵌套的布尔表达式并分别获取表达式中的各个条件.例如,如果输入字符串是: (A = a OR B = b OR C = c AND((D = d AND E = e)OR(F = f AND G = g))) 我想以正确的顺序获得条件.即, D = d和E = e 要么F = f AND G = g和A = a OR B = b OR C = c 我正在使用ANTLR 4来解析

java – IntelliJ IDEA Gradle项目无法识别/定位Antlr生成的源

我在一个简单的Kotlin / Gradle项目中使用Antlr,而我的Gradle构建生成Antlr源,它们无法导入到项目中. 如您所见(左侧),正在生成类(Lexer / Parser等).我还将这个generated-src / antlr / main目录配置为Source Root.我看到的大多数问题都将此列为解决方案,但我已经完成了. 多次重建

python – Antlr4在RaspberryPi上运行缓慢

我们正在尝试使用Antlr4(Python2目标)在RaspberryPi B上解析自定义语言.但是,做任何严肃的事情都太慢了:解析几行需要大约十秒钟.这是我的代码: Transposeur.py: # -*- coding:Utf-8 -*- from antlr4 import * from TransposeurLexer import TransposeurLexer from TransposeurParse

java – 缩进而不是Antlr4的括号

我目前正在参加“编译器构造”课程,我正在Antlr 4中开发一个简化的Java语法.涉及Java语法的部分工作得很好,除了它与原始Java略有不同. 我被告知我不应该使用括号而是使用缩进.我已经尝试了一些来自互联网的例子,只有Antlr 3的例子在Antlr 4中不起作用. 任何人都可以帮我解决这个缩

c# – Antlr错误策略跳过令牌,直到规则再次匹配

我试过this解决方案,但它似乎对我不起作用 这是我的语法的摘录: module : BEGIN MODULE IDENT STRING module_element* END MODULE ; module_element : element_1 | element_2 | element_3 | ... ; 每个元素下面都有一棵更大的树.现在,当发生RecognitionExceptio

c# – 从任意纯文本中提取特定标记

我想解析纯文本注释并在其中查找某些标记.我正在寻找的标签类型如下: <name#1234> 其中“name”是[a-z]字符串(来自固定列表),“1234”表示[0-9]数字.这些标记可以在字符串中出现零次或多次,并被任意其他文本包围.例如,以下字符串都是有效的: "Hello <foo#56> world!" "<bar#1>!"

java – 如何获取antlr解析的错误消息?

我用antlr 4.4编写了一个语法,如下所示: grammar CSV; file : row+ EOF ; row : value (Comma value)* (LineBreak | EOF) ; value : SimpleValueA | QuotedValue ; Comma : ',' ; LineBreak : '\r'? '\n' | '\r

ANTLR4 Python从字符串而不是路径解析

我正在使用ANTLR4和Python,我目前正在使用以下代码进行解析: lexer = MyGrammarLexer(FileStream(path)) stream = CommonTokenStream(lexer) parser = MyGrammarParser(stream) return parser.start().object 但是,我想将此代码更改为直接从给定字符串而不是给定路径进行解析.从

如何将生成的词法分析器/解析器从Antlr4集成到我的java项目中

请耐心等待我不是编码专家. 我使用ANTRWorks 2在ANTLR4中构建了一个语法.我用各种测试字符串测试了语法,它在那里工作得很好.现在我遇到的麻烦就是在我自己的代码中使用生成的词法分析器和解析器.作为代码生成目标,我正在使用Java. 这是我正在尝试的代码: String s = "query(std::m

java – 在Scala插件中控制错误的IntelliJ代码编辑器错误

我有从ANTLR4生成的Java代码. Scala通过扩展一些方法来使用Java代码.问题是IntelliJ的scala插件似乎不知道Java基类和Scala子类之间的关系,以显示误报错误消息;当Scala覆盖Java方法时,它会报告“方法…无法覆盖任何内容”. 如何控制IntelliJ中的错误级别来抑制此错误消息? 解决方法: