您好,我正在使用JavaCC,我正在写一个在“”之间放置一个String的令牌。 语境:

void literalString(): {} { """ (characteresString())? """ }
void characteresString(): {} { <characterString> | characteresString() <characterString> }

所以我做了这个令牌来放置一个字符串:

TOKEN : {<characterString : ~["\", "] >}

问题是我不知道如何在令牌中排除“”符号,如果我放入“”符号,它将给我错误,如果我再次放入一个“”错误。

先感谢您

===============>>#1 票数:1 已采纳

代替

void literalString(): {} { """ (characteresString())? """ }

使用令牌定义

TOKEN : { <STRING : "\"" (<CHAR>)* "\"" >
        | <#CHAR : ~["\""] > // Any character that is not "
}

现在,这个定义字符串是"后跟零个或多个字符不属于"秒,然后另一个"

但是,某些语言还有其他限制,例如仅允许一定范围内的字符。 例如,如果仅允许使用可打印的ascii字符,但不包括" ,则应使用

TOKEN : { <STRING : "\"" (<CHAR>)* "\"" >
        | <#CHAR: [" ","!","#"-"~"]> // Printable ASCII characters excluding "
}

但是,假设您要允许"如果字符前面带有\\并且要禁止\\字符,除非它们后面带有"或另一个\\n 那你可以用

TOKEN : { <STRING : "\"" (<CHAR> | <ESCAPESEQ>)* "\"" >
        | <#CHAR: [" ","!","#"-"[","]"-"~"] > // Printable ASCII characters excluding \ and "
        | <#ESCAPESEQ: "\\" ["\"","\\","n"] > // 2-character sequences \\, \", and \n
}

  ask by Fran translate from so

未解决问题?本站智能推荐:

1回复

(...)*构造中的JAVACC ERROR选择冲突

我是第一次使用javacc。 我不断收到此错误: 我调查了一下,发现这是由于解析器不知道哪个选择最合适。 错误在(在这一行中,请问有人能帮助我正确理解吗?
2回复

JavaCC:如何从令牌中排除字符串? (也要理解令牌的歧义。)

我已经在理解方面有很多问题,如何在JavaCC中优雅地(或完全以某种方式)处理歧义标记。 让我们来看这个例子: 我想解析XML处理指令。 格式为: "<?" <target> <data> "?>" "<?" <target>
1回复

从JavaCC的生产规则中排除某些令牌模式

假设我们有生产规则Expression ,可以在LogicExpression , MathExpression , StringExpression和ListExpression之间进行选择。 所有这四个生产规则都可以评估为令牌IDENTIFIER,因此表达式IDENTIFIER +
1回复

在Javacc中排除字符串作为标记

我试图在Javacc中创建语法,并且对于函数名,我可以使用各种低位字母或“ main”。 如果“ main”是函数名称,则需要采用不同的过程。 我的问题是,当main作为选择包含在其中时,不能将其匹配为字符串文字。 所以我希望,如果我从令牌中排除“ main”一词,那么它可能会起作用!
1回复

反斜杠转义了JavaCC令牌中的字符

我正在为这样的字符流编写JavaCC解析器 Abc \\(Def\\) Gh (Ij; Kl); Mno (Pqr) 并且应该像这样标记化 Abc \\(Def \\)Gh LPAREN IJ 分号 KL RPAREN 分号
2回复

JavaCC:令牌定义中的多个相等字符

在JavaCC中,如何定义由重复字符组成的令牌,例如以下示例: “......” 对应什么 要么 “ ::”对应什么 要么 “ //”对应什么 等等 JavaCC编译器允许我在没有警告消息的情况下定义这些标记,但是一旦我在另一
1回复

如何在javacc中更新并打印“ Rational”令牌?

我添加了新的令牌RATIONAL,它可以在JavaCC解析器中识别有理数。 如何更新程序的输出部分以打印有理数的数值? 例如('2/5')值= 0.4,('8/2')值= 4.0,('4/0')值=无穷大。 如果有人可以帮助我,我将不胜感激。 谢谢。
1回复

如何在JavaCC中对令牌执行否定的LOOKAHEAD检查?

我目前使用JavaCC实现JavaScript / ECMAScript 5.1解析器。 我最近了解了LOOKAHEAD ,由于语法不是完全LL(1),因此在这里很方便。 我在ECMAScript语法中看到的一件事是“负超前检查”,就像下面的ExpressionStatement生产中一
1回复

JavaCC令牌不匹配

我正在尝试为简单语言编写解析器,但到了我不知道如何处理该问题的地步。 这是my.jj文件 目前,写入文件并不重要。 这是我要解析的文本: 这是我从调试器得到的输出: 如您所见,解析器输入了varDeclaration方法,但是为什么他不能将令牌与单词VAR匹配?
1回复

JAVACC令牌定义

我正在使用javacc进行项目,遇到问题,需要一些帮助,我在文件中有以下内容: 我已经为单词STRING定义了一个令牌,并且我想定义另一个令牌( NAME )以获取所有单词COPYRIGHT (C) 2003, 2004 SYNOPSYS, INC. 问题是我有一个令牌INTEGE