例如,我在语法中定义了几个lexer规则:
INT: 'int';
FLOAT: 'float';
...
DIGIT : [0-9];
NUMERIC : (DIGIT+ | DIGIT+ '.' DIGIT+ | '.' DIGIT+ | DIGIT+ '.');
...
我需要以某种方式标记关键字(“int”、“float”和其他),当我使用TokenStream获取令牌时,我可以通过一些自定义符号对其进行过滤。
有可能吗?
现在我只看到一种方法——将必要的词汇组合成某种规则。
使现代化
我尝试应用下面第一个答案的第一个选项,但遇到了下一个问题:我得到一个错误:“TOKENNAME不是可识别的令牌名称”
因为这是一个问题。我从这里应用建议:
使用
options { tokenVocab = MyLexer; }
而不是
import MyLexer;
并获取错误:“error(114):MyParser。g4:3:23:找不到令牌文件。\MyLexer公司。代币'
这里说,我是如何理解的,当ANTLR源文件(MyParser. g4、MyLemus. g4)放置在放置生成包的同一目录中时可能会发生这种情况。但是我将输出文件的属性设置为另一个目录。也许我得到了一些误解...
这里有一个小例子。
根据您使用词法器的其他内容,您可以探索2种途径。
>
以那里的文档为例:
lexer grammar SetType;
tokens { STRING }
DOUBLE : '"' .*? '"' -> type(STRING) ;
SINGLE : '\'' .*? '\'' -> type(STRING) ;
WS : [ \r\t\n]+ -> skip ;
这将允许单个类型STRING
的多个规则,这是您将在流中收到的令牌类型。
拥有令牌流后,可以使用该命令标记和过滤令牌。如果以后仍需要解析,这有保留原始lexer流的好处。
同样,从antlr文档中窃取示例:
BLOCK_COMMENT
: '/*' .*? '*/' -> channel(HIDDEN)
;
LINE_COMMENT
: '//' ~[\r\n]* -> channel(HIDDEN)
;
是否有可能为raku语法定义一个自定义lexer,即将字符串转换为int-id值流的lexer?我在玩弄语法结构。 规则看起来很直观,因为它们可能在递归下降解析器中转换为函数。然而,令牌和正则表达式我希望能够通过显式令牌ID和一个接口将它们映射到一个名称,这样我就可以编写自己的lexer了?
问题内容: 我有一些需要经常打印的结构。现在,我正在围绕该结构使用经典的打印包装器: 此功能很方便,但实际上也很有限。如果不进行新包装,则无法添加或添加一些文本。我知道我可以使用 va_arg 系列添加或添加一些文本,但是我觉得我会重新实现。 我想知道是否有可能向printf编写自定义函数。我希望能够写这样的东西: 这可能吗 ?我怎样才能做到这一点 ? 注意:我在Ubuntu Linux 10.0
一份简单的元素定义 Editor.UI.registerElement('foobar-label', { template: ` <div class="text">Foobar</div> `, style: ` .text { color: black; padding: 2px 5px; border-radius: 3px
免登录地址可扩展自定义参数 使用场景 开发正在对接积分商城过程中,会有一些特殊场景,需要实现特定的功能,为此免登录地址中支持增加可扩展自定义参数,实现特定功能的实现。从而增强免登录地址的使用范围 主要参数 1.dcustom参数 2.transfer参数 3.signKeys参数 使用方法详见具体参数使用说明
我有一个错误: 原因:java.lang.IllegalArgumentException:指定为非Null的参数为Null:方法kotlin.jvm.internal.intrinsics.CheckParameterIsNotNull,参数savedInstanceState 当我试图在Kotlin中膨胀一个自定义对话框时,我在对话框中的super.oncreate行上得到了上面写的错误。 对
我做了这个自定义函数,并把它放在全局之外,这通常会工作。我也试着在主异步木偶函数中移动它,但也不起作用。这是一个简单的函数。在每个page evaluate函数中,我调用它并传递选择器。但是,它的说法没有定义和promise拒绝,这是奇怪的,因为函数不是promise....请帮助 我尝试将函数转换为异步函数,添加了一个新的参数页。然后,我将async添加到我的评估函数中,然后将puppeteer