2015-10-25 160 views
1

试图为PowerScript语言构建语法。我将这部分语言分成几部分,除了简单的标题之外,一切似乎都在起作用。看来$ simbol不能被识别。任何人都可以帮我一下吗? (我刚才复制的小例子,我想)

grammar PowerScript; 

compilationUnit : Header EOF; 

fragment 
Header : ID '.' ID; 

ID : [a-zA-Z0-9$_]+ ; 

测试文件只包含:

$PBExportHeader$n_logversion.sru 

感谢

回答

2

compilationUnit规则是一个解析器规则。解析器规则不能引用词法分析器片段。只要删除fragment限定词即可使Header成为适当的词法分析规则。

更新

Antlr4是完全支持Unicode能力。只需包含标准Unicode编码形式的字符:

ID : ([a-zA-Z0-9$_] | '\uD83D\uDCB2')+ ; // Unicode heavy Dollar sign 
+0

嗨!首先感谢..但不是..它应该是有关的Linux或UTF。这是我从antlrv4更改后得到的:行1:0令牌识别错误:'$' 行1:15令牌识别错误:'$' 行1:1不匹配的输入'PBExportHeader'期待标头 语法错误 行1:17标记识别错误:'_' 行1:28标记识别错误:'。' – darioaxel

+0

有什么变化?如果有人建议,那么问题就出现在语法的其他地方。发布一个实际的工作语法来重现问题。如果你实际上并没有使用'$'(U + 0024),那么将实际的字符包含在'ID'规则中的字符列表中。 – GRosenberg

+0

是的,在我使用UnitTest时,似乎问题来自Java。我今天尝试编译和测试在终端的语法,它的工作正常..谢谢,我签署的答案是正确的。 – darioaxel