Antlrworks - 无关输入

2024-01-01

我是这方面的新手,因此我需要你的帮助。 我正在尝试解析 Wikipedia Dump,我的第一步是将它们定义的每个规则映射到 ANTLR,不幸的是我遇到了第一个障碍:

第 1 行:8 外部输入 ''''' 需要 '\'\''

我不明白发生了什么事,请帮助我。

My code:

grammar Test;

options {
    language = Java;
}

parse
    :  term+ EOF
    ;

term 
    :  IDENT
    |  '[[' term ']]'
    |  '\'\'' term '\'\''
    |  '\'\'\'' term '\'\'\''
    ;    

IDENT
    :  ('a'..'z' | 'A'..'Z' | '0'..'9' | '=' | '#' | '"' | ' ')*
    ;

Input'''''你好世界'''''


词法分析器规则必须始终匹配至少 1 个字符。你的规则:

IDENT : ('a'..'z' | 'A'..'Z' | '0'..'9' | '=' | '#' | '"' | ' ')*;

匹配一个空字符串(其数量是无限的)。改变* to a +:

IDENT : ('a'..'z' | 'A'..'Z' | '0'..'9' | '=' | '#' | '"' | ' ')+;

EDIT

Input '''''Hello World'''''

尽管您将文字标记放入解析器规则中('\'\'\'', '\'\''等),你必须明白它们是not根据解析器的要求创建。词法分析器遵循严格的规则来创建标记:

  1. 它尝试尽可能多地匹配
  2. 如果 2 个不同的词法分析器规则匹配相同数量的字符,则第一个定义的规则将优先

让我们为您的文字标记命名:

BRACKET_OPEN  : '[[';
BRACKET_CLOSE : ']]';
Q3            : '\'\'\'';
Q2            : '\'\'';
IDENT         :  ('a'..'z' | 'A'..'Z' | '0'..'9' | '=' | '#' | '"' | ' ')+;

现在,由于规则#1(尽可能多地匹配),输入'''''Hello World'''''将被标记如下:

  • Q3
  • Q2
  • IDENT
  • Q3(是的,一个Q3!)
  • Q2

但是你的解析器规则term只会接受Q3 Q2 IDENT Q2 Q3,因此您的输入无法正确解析是正确的。

另外,我建议您不要使用解释器:它有很多问题。不过,调试器的工作方式就像一个魅力!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Antlrworks - 无关输入 的相关文章

  • 来自 bison 的 ANTLR 语法

    我正在尝试将语法从 bison 翻译为 ANTLR 野牛的语法本身非常简单 但我找不到简单的方法来做到这一点 野牛语法 expr expr or expr expr and expr expr 欢迎任何提示 链接 指针 谢谢 尤利安 在AN
  • ANTLR2 与 ANTLR3

    您使用过其中一个或两者吗 您更喜欢哪一个 出于什么原因 例如 我最近学习了 v2 并且由于 netbeans 团队提供的高性能实现 是的 我被 java 困住了 我可能会坚持使用它 在这种情况下 是否有任何令人信服的理由进行转换 要了解 v
  • ANTLR如何在输入结束时检测垃圾数据

    当使用 ANTLR 编写的语法时 解析器可以正确识别输入流中的数据 但如果我在输入末尾有一些垃圾文本 不应该由语法解析 解析器不会抱怨 我想这种行为是可以的 我的意思是解析器完成了它的工作并解析了我所说的它应该解析的任何内容 但是有什么技巧
  • ANTLR:“规则范围内缺少属性访问”问题

    我正在尝试构建一个 ANTLR 语法来解析标记句子 例如 DT The NP cat VB ate DT a NP rat 并有语法 fragment TOKEN A Z a z fragment WS t WSX WS DTTOK DT
  • ANTLR 歧义问题

    我有这个语法 grammar MyGrammar prog lexeme lexeme TOK INTLIT 0 9 Identifiers Letter Letter Digit fragment Letter a zA Z fragme
  • xtext 中的终端/数据类型/解析器规则

    我正在使用 xtext 2 4 我想做的是类似 SQL 的语法 让我困惑的是我不确定哪些东西应该被视为终端 数据类型 解析器规则 到目前为止我的语法相关MyTerm is Model terms MyTerm MyTerm constant
  • 将 Antlr 语法树转换为有用的对象

    我目前正在考虑如何最好地获取使用 Antlr 生成的 AST 并将其转换为可以在我的程序中使用的有用对象 我语法的目的 除了学习之外 是创建一种可执行 运行时解释 语言 例如 我将如何获取属性子树并实例化特定的属性类 例如 以下代码用我的语
  • 编写对空格敏感的解析器规则,同时从词法分析器中跳过 WS

    我在处理空白时遇到一些麻烦 在以下语法摘录中 我设置了词法分析器 以便解析器跳过空格 ENTITY VAR user resource INT DIGIT DIGIT ID LETTER LETTER DIGIT SPECIAL ENTIT
  • 删除这种左递归方式来定义 SELECT 语句

    我正在尝试解析以下内容SELECT陈述 select 1 union all select 1 union all with cte as select 1 select 1 from tbl limit 1 union all selec
  • 使用 ANTLR 通过 Python 解析一些 Java 代码

    我想在 Python 中使用 ANTLR 构建一个 Java 解析器 我从 ANTLR 存储库下载了语法 Lexer https github com antlr grammars v4 blob master java java Java
  • ANTLR:乘法省略“*”符号

    我正在尝试创建一个用于乘法和除法的语法 其中不需要包含 符号 我需要它来输出 AST 所以对于这样的输入 1 2 3 4 我希望 AST 是 1 2 3 4 我发现了以下内容 它使用 java 代码来创建适当的节点 grammar Test
  • 如何从维基百科文章中提取数据?

    我有一个关于为我的 Android 应用程序解析维基百科数据的问题 我有一个脚本 可以通过读取源代码来下载 XMLhttp en wikipedia org w api php action parse prop text format x
  • ANTLRWorks 1.4.3 无法正确读取扩展 ASCII 字符

    我正在开发一个相当标准的编译器项目 我选择 ANTLR 作为解析器生成器 在将现有语法从 v2 更新到 v3 时 我注意到 ANTLRWorks ANTLR 的官方 IDE 无法正确显示文件中的任何扩展 ASCII 字符 即使使用 Note
  • ANTLR4 相当于什么!在词法分析器规则中?

    我正在努力将旧的 ANTLR 2 语法转换为 ANTLR 4 但我在字符串规则方面遇到了问题 STRING r n 这创建了一个STRING其文本包含字符串内容的标记 但是不含开始和结束引号 因为 引号文字后面的符号 ANTLR 4 扼流圈
  • 解析维基百科的出生和死亡日期?

    我正在尝试编写一个 python 程序 可以在维基百科中搜索人们的出生和死亡日期 例如 阿尔伯特 爱因斯坦出生于 1879 年 3 月 14 日 逝世日期 1955 年 4 月 18 日 我开始于使用 Python 获取维基百科文章 htt
  • 维基百科与 Python

    我有这个非常简单的 python 代码来读取 wikipedia api 的 xml import urllib from xml dom import minidom usock urllib urlopen http en wikipe
  • Antlr 处理异常

    我使用 Antlr 3 和 AST 树开发了一个复杂的语法 ANTLR 生成词法分析器和解析器 问题是 例如 当用户输入无效的语法时 该语法需要 用户没有输入此内容 然后在我的 Eclipse IDE 中出现以下异常 line 1 24 m
  • 从 Wikipedia XML 转储获取静态 HTML 文件

    我希望能够从巨大的 即使是压缩的 英语维基百科 XML 转储文件中获取相对最新的静态 HTML 文件enwiki 最新 pages articles xml bz2 http download wikimedia org enwiki la
  • 有没有使用 ANTLR 或类似语言实现的简单语言?

    我正在尝试构建一种简单的解释语言以用于学习目的 我读过无数关于 ANTLR 和 JavaCC 的理论和教程 但我不知道如何真正让它做一些有用的事情 我通过 把东西拆开然后重新组合起来 来学得最好 那么 是否有任何在 ANTLR 或类似工具的
  • 导出维基百科翻译标题的简单方法

    有没有一种简单的方法可以导出维基百科的翻译标题以获得这样的集合 russian title gt english title 我试图从ruwiki 最新 页面 meta current xml bz2 and ruwiki 最新 pages

随机推荐