首页 文章
  • 1 votes
     answers
     views

    Lexer的前瞻如何与ANTLR3和ANTLR4中的贪婪和非贪婪匹配一起工作?

    如果有人能够从前瞻性关系背后的混淆中清除我的想法,那就是涉及格雷斯/非贪婪匹配的令牌化,我会非常高兴 . 这是一个稍长的帖子,因为它跟随我的思考过程 . 我正在尝试编写antlr3语法,允许我匹配输入,如: “identifierkeyword” 我在Antlr 3.4中提出了类似的语法: KEYWORD: 'keyword' ; IDENTIFIER : (options {greedy...
  • 283 votes
     answers
     views

    词法分析者与解析者

    词法分析器和解析器在理论上真的有那么不同吗? 讨厌正则表达式似乎很时髦:coding horror,another blog post . 但是,流行的基于lexing的工具:pygments,geshi或prettify,都使用正则表达式 . 他们好像有什么东西...... 什么时候足够兴奋,什么时候需要EBNF? 有没有人使用这些词法分析器生成的令牌与野牛或antlr解析器生成器?
  • 2 votes
     answers
     views

    解析器/词法分析器规则的Antlr v3错误

    我的Antlr语法有问题 . 我正在尝试为'typedident'编写一个解析器规则,它可以接受以下输入: 'int a'或'char a' 变量名'a'来自我的词法分析器规则'IDENT',其定义如下: IDENT : (('a'..'z'|'A'..'Z') | '_') (('a'..'z'|'A'..'Z')|('0'..'9')| '_')*; 我的'typedident'解析器规则如...
  • 0 votes
     answers
     views

    使用ANTLR4在语法中排序词法分析器规则

    我已经阅读了非常有用的ANTLR Mega Tutorial但我仍然坚持如何正确地订购(和/或写)我的词法分析器和解析器规则 . 我希望解析器能够处理这样的事情: 你好“姓名”,你好吗? 在运行时,我将用用户名替换“<< name >>” . 所以我主要解析文本单词(和标点符号等),除了偶尔出现的“<< something >>”标签,我在lexer...
  • 0 votes
     answers
     views

    Antlr - 是否有任何正式的解释,为什么首先定义的词法分析器规则对后面定义的解析器规则不可见?

    最初的 Headers 问题是:为什么我的词法分析器规则不起作用,直到我将其更改为解析器规则?以下内容与此问题有关 . 然后我找到了新的信息并更改了 Headers 问题 . 请看我的评论! 我的Antlr语法(只有“空格”规则,它的使用很重要): grammar MyTest; Space: ' '; Tab: '\t'; Break: '\n'; ...
  • 0 votes
     answers
     views

    ANTLR4 '+'操作

    我正在使用ANTLR4参加我现在正在学习的课程,我似乎很了解它,但我无法弄清楚它的作用 . 我只能说它通常在括号中的一组字符之后 .
  • 1 votes
     answers
     views

    ANTLR如何决定应用哪个词法分析器规则?最长的匹配词法分析器规则获胜?

    输入内容: 语法: grammar test; p : EOF; Char : [a-z]; fragment Tab : '\t'; fragment Space : ' '; T1 : (Tab|Space)+ ->skip; T2 : '#' T1+ Char+; 匹配结果如下: [@0,0:6='# abc',<T2>,1:0] <<&l...
  • 3 votes
     answers
     views

    在ANTLR中捕获“所有其他”字符

    我正在尝试将ANTLR定义的语法集成到NetBeans中,到目前为止,有效的语法工作正常 . 但是,当前如果输入任何未在某处语言中定义的字符(例如,“?”字符),自定义编辑器会立即崩溃,因为它无法找到该字符的规则 . 在没有整个词法分析器崩溃和刻录的情况下,ANTLR中是否有一种方法可以捕获并跳过与规则不匹配的每个字符(并且可能输出错误消息)?我想标记无效字符,跳过它们,然后继续lexing,例如...
  • 1 votes
     answers
     views

    java错误尝试导入多种模式的词法分析器语法

    我正试图弄清楚如何在我的语法中使用模式,我对如何将不同模式的词法分析器语法导入组合语法感到困惑 . 希望这很简单,但我无法弄清楚 . 基本上我正在尝试创建一个识别正则表达式字符串的语法 - 所以一个字符串以任何非空白字符开头,然后以换行符结束 . 看看如何在antlr4书中使用模式,我想出了这个词法分析器语法: lexer grammar hlex; REG : REGLIMIT -> m...
  • 3 votes
     answers
     views

    词法分析器中的Antlr4动作和谓词

    我正在尝试为Antlr4中动态确定的批处理分隔符创建词法分析器规则 . 这支持两个用例: 不同的数据库系统定义了自己的批处理分隔符(例如'go',';''/') 我还想允许用户定义的批处理分隔符,最长可达2个字符,并且可能是任何东西,但是对于这个示例,我们假设它们是ascii字符 . 因此,出于本示例的目的,批处理分隔符是单独在其自身行上的任何字符串,并与当前已知的批处理分隔符匹配 ....
  • 6 votes
     answers
     views

    分别使用ANTLR Parser和Lexer

    我使用ANTLR版本4来创建编译器 . 第一阶段是Lexer部分 . 我创建了“CompilerLexer.g4”文件并在其中推出了lexer规则 . 它工作正常 . CompilerLexer.g4: lexer grammar CompilerLexer; INT : 'int' ; //1 FLOAT : 'float' ; //2 BEG...
  • 2 votes
     answers
     views

    为ANTLR回溯词法分析器

    我'm extending a JavaScript ANTLR grammar that uses the C target to handle JScript'的条件编译注释,即 /*@cc_on ... @*/ . 这些需要与正常的块注释分开处理,因为 /*@cc_on /* hello */ @*/ 会导致单个条件编译注释延伸到第二个注释结束标记 . 我从熟悉的词法分析器规则开始: Co...
  • 35 votes
     answers
     views

    词法分析器与解析器之间的通信

    每次我写一个简单的词法分析器和解析器时,我都会遇到同样的问题:词法分析器和解析器应该如何通信?我看到四种不同的方法: 词法分析器急切地将整个输入字符串转换为标记向量 . 完成此操作后,向量将被提供给解析器,解析器将其转换为树 . 这是迄今为止最简单的实现方案,但由于所有令牌都存储在内存中,因此浪费了大量空间 . 每次词法分析器找到一个标记时,它会调用解析器上的一个函数,并传递当前标记 . ...
  • 0 votes
     answers
     views

    错误[E0507]:无法移出借来的内容

    我'm trying to make a lexer in Rust while being relatively new to it but with a background in C/C++. I'm在以下代码中如何分配内存有问题,这会生成错误"Cannot move out of borrowed content" . 我已经阅读了 cargo --explain E0...

热门问题