Csharp/C#教程:不匹配时lexing和解析模式时的输入分享


不匹配时lexing和解析模式时的输入

我有输入不匹配的ANTLR4问题,但无法解决。 我发现了很多关于它的问题,并且通常围绕词法分析器匹配其他东西到令牌,但我不认为它在我的情况下。

我有这个lexer语法:

FieldStart : '[' Definition ']' -> pushMode(INFIELD) ; Definition : 'Element'; mode INFIELD; FieldEnd : '[end]' -> popMode ; ContentValue : ~[[]* ; 

然后在以下解析器上运行:

 field : FieldStart ContentValue FieldEnd #Field_Found; 

我简化了它以放大问题,但这里是我无法进一步发展的地方。

我正在运行以下输入:

 [Element]Va-lu*e[end] 

我得到这个输出:

 Type : 001 | FieldStart | [Element] Type : 004 | ContentValue | Va-lu*e Type : 003 | FieldEnd | [end] Type : -001 | EOF |  ([] [Element] Va-lu*e [end]) 

我使用C#生成输出,执行以下操作(缩短):

  string tokens = ""; foreach (IToken CurrToken in TokenStream.GetTokens()) { if (CurrToken.Type == -1) { tokens += "Type : " + CurrToken.Type.ToString("000") + " | " + "EOF" + " | " + CurrToken.Text + "n"; } else { tokens += "Type : " + CurrToken.Type.ToString("000") + " | " + Lexer.RuleNames[CurrToken.Type - 1] + " | " + CurrToken.Text + "n"; } } tokens += "nn" + ParseTree.ToStringTree(); 

在解析此通道时

 IParseTree ParseTree = Parser.field(); 

我出现了这个错误:

 "mismatched input 'Va-lu*e' expecting ContentValue" 

我只是没有找到错误,你能在这帮我吗? 我认为它与词法分析器模式有关,但据我所知,它似乎解析器不关心(或知道)模式。

谢谢!

模式不适用于组合语法。 拆分你的语法,它应该工作。

此外,请始终检查错误消息:

错误(120):../ Field.g4:14:5:词法模式只允许在词法分析器语法中

我想我现在已经想出了如何解决我的问题,在使用拆分的Lexer / Parser语法结构并使用Visual Studio(2012和2013测试)中的Lexer模式和ANTRL4 NuGet版本时,似乎需要配置:

我必须包括

上述就是C#学习教程:不匹配时lexing和解析模式时的输入分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 options { tokenVocab = GRAMMAR_NAME_Lexer; } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1010131.html

(0)
上一篇 2021年12月29日
下一篇 2021年12月29日

精彩推荐