标签: antlr

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

我正在使用GitHub中的antlr4 解析器语法词法分析器语法来解析Python3中的PHP.

当我直接使用这些语法时,我的PoC代码可以工作:

antlr-test.py

from antlr4 import *
# from PHPParentLexer import PHPParentLexer
# from PHPParentParser import PHPParentParser
# from PHPParentParser import PHPParentListener

from PHPLexer import PHPLexer as PHPParentLexer
from PHPParser import PHPParser as PHPParentParser
from PHPParser import PHPParserListener as PHPParentListener


class PhpGrammarListener(PHPParentListener):
    def enterFunctionInvocation(self, ctx):
        print("enterFunctionInvocation " + ctx.getText())


if __name__ == "__main__":
    scanner_input = FileStream('test.php')
    lexer = PHPParentLexer(scanner_input)
    stream = CommonTokenStream(lexer)
    parser = PHPParentParser(stream)
    tree = parser.htmlDocument()
    walker = ParseTreeWalker()
    printer = PhpGrammarListener()
    walker.walk(printer, tree) …
Run Code Online (Sandbox Code Playgroud)

python parsing antlr antlr4

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

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

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

antlr parser-generator antlr3

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

为什么Netbeans要求我无法更新的插件?

我想安装ANTLRWorks插件,但Netbeans说:

Some plugins require plugin **Editor Settings Storage** to be installed.
The plugin Editor Settings Storage is requested in implementation version 201302132200.  The following plugin is affected:       ANTLRWorks Editor 

Some plugins require plugin **Editor Options** to be installed.
The plugin Editor Options is requested in implementation version 201302132200.  The following plugin is affected:       ANTLRWorks Editor 
Run Code Online (Sandbox Code Playgroud)

我无法在互联网上找到这些插件,也没有关于此问题的信息(只有来自其他人的相同问题)

有任何想法如何更新这些插件?

更新:

我发现该插件需要较旧版本的 org.netbeans.modules.editor.settings.storage 201302132200,我的版本为201306052037.我可以降级netbeans中的插件吗?

plugins netbeans antlr updates

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

ANTLR 4何时需要EOF?

ANTLRWorks2中的TestDriver似乎有点挑剔,它什么时候会接受没有和明确的语法EOF,什么时候不接受.ANTLR4入门指南中的Hello语法不会在任何地方使用,因此我推断如果可能的话,最好避免显式.EOFEOF

使用的最佳做法是EOF什么?你什么时候需要它?

antlr antlrworks

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

Antlr4 C#应用程序教程/示例

我想使用Antlr4来解析我的C#应用​​程序中的一些文件.鉴于我的语法,到目前为止,我已经能够生成解析器和词法分析器文件.现在我想在文件中使用read并将解析器和词法分析器应用于它们.我一直在寻找有关如何做到这一点的文档,但我很简短.我找到了一些使用以前版本的Antlr的旧例子,但它们似乎不适用于Antlr4.任何帮助,将不胜感激.谢谢.

c# antlr antlr4

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

在Eclipse Luna上设置ANTLR 4 IDE的麻烦(4.4)

我正在尝试在Eclipse Luna(4.4)上安装ANTLR 4 IDE.我已经从Marketplace安装了它,但我不知道如何创建一个包含ANTLR 4 Lexer/Parser的项目.

当我去创建一个新项目时,我没有看到ANTLR 4的任何选项.我尝试创建一个.g4文件,它在编辑器中打开,但是当我保存它没有做任何事情.

java eclipse antlr antlr4

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

ANTLR4 Python解析大文件

我正在尝试为juniper/srx路由器访问控制列表编写解析器.以下是我使用的语法:

grammar SRXBackend;

acl:
    'security' '{' 'policies' '{' COMMENT* replaceStmt '{' policy* '}' '}' '}'
            applications
            addressBook
;

replaceStmt:
    'replace:' IDENT
|   'replace:' 'from-zone' IDENT 'to-zone' IDENT
;

policy:
    'policy' IDENT '{' 'match' '{' fromStmt* '}' 'then' (action | '{' action+ '}') '}'
;

fromStmt:
     'source-address' addrBlock                     # sourceAddrStmt
|    'destination-address' addrBlock                # destinationAddrStmt
|    'application' (srxName ';' | '[' srxName+ ']')  # applicationBlock
;

action:
    'permit' ';'
|   'deny' ';'
|   'log { session-close; }'
;

addrBlock:
    '[' srxName+ …
Run Code Online (Sandbox Code Playgroud)

python parsing antlr antlr4

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

在ANTLR中,我可以预先查看特定的令牌而不实际匹配它们吗?

基本上,我需要预见知道某个令牌是否存在,但是没有匹配它(即,这样另一个解析器规则仍然可以匹配它).

问题的确切细节是"END-ALL"条款.该语言具有类似"IF"(由"END-IF"关闭),"FOR"(由"END-FOR"关闭)等结构.

但是可以选择使用"END-ALL"全局关闭所有这样的开环(因此不需要实际的"END-IF"或"END-FOR"子句).

无论如何我能正确实现吗?

antlr

15
推荐指数
1
解决办法
4127
查看次数

如果指定文件被更改,如何执行CMake目标?

我正在尝试在我的C++项目中使用ANTLR.我为指定的语法创建了运行ANTLR生成器的目标,并使主要的prjct依赖于它.

ADD_CUSTOM_TARGET(GenerateParser
    COMMAND ${ANTLR_COMMAND} ${PROJECT_SOURCE_DIR}/src/MyGrammar.g 
                             -o ${PROJECT_SOURCE_DIR}/src/MyGrammar
)

ADD_LIBRARY(MainProject ${LIBRARY_TYPE} ${TARGET_SOURCES} ${TARGET_OPTIONS})
ADD_DEPENDENCIES(MainProject GenerateParser)
Run Code Online (Sandbox Code Playgroud)

问题是每次构建项目时都会运行ANTLR生成器并消耗足够的时间.我怎样才能让它只运行我的语法?或者可能有可能使ANTLR以某种方式仅为过时语法生成解析器.

antlr cmake

15
推荐指数
2
解决办法
8368
查看次数

LALR vs LL解析器

我一直在使用lex/yacc,现在我正在尝试切换到ANTLR.主要关注的是ANTLR是一个LL(*)解析器,与yacc不同,它是LALR.我习惯于自下而上思考,我不知道LL语法的优点是什么.人们说LL语法现在更容易理解,更受欢迎.但似乎LR解析器更强大,例如LL解析器无法处理左递归,尽管似乎有一些解决方法.

那么问题是LL语法比LALR有什么优势?如果有人能给我一些例子,我会很感激.有用文章的链接也很棒.

感谢您的帮助!

(我认为这是一个很好的资源:LL解析器对LR解析器有什么优势?但是对于一些例子它会更好.)

parsing yacc antlr lalr ll-grammar

15
推荐指数
2
解决办法
7270
查看次数