EBNF到JavaCC词法分析器

时间:2014-04-22 11:33:49

标签: java lexer javacc

如何将:: = [A-Za-z]转换为JavaCC?

我做了什么:

TOKEN :
{
  < LETTER : (["A"-"Z"])>
}

但我不知道如何处理较小的字母部分

1 个答案:

答案 0 :(得分:1)

像这样:

TOKEN :
{
  < LETTER : (["A"-"Z", "a"-"z"])>
}

Reference

  

字符列表描述了一组字符。字符列表的合法匹配是此集合中的任何字符。字符列表是由方括号内的逗号分隔的字符描述符列表。每个字符描述符描述一个字符或一系列字符(参见下面的字符描述符),并将其添加到字符列表的字符集中。如果字符列表以“〜”符号作为前缀,则它表示的字符集是不在指定集合中的任何UNICODE字符。

请注意规则:

TOKEN :
{
  < LETTER : (["A"-"Z", "a"-"z"])>
}

相当于:

TOKEN :
{
  < LETTER : ["A"-"Z", "a"-"z"]>
}

两者都匹配一个字母。如果你想重复这个课,你需要括号并附加一个+量词:

TOKEN :
{
  < LETTERS : (["A"-"Z", "a"-"z"])+ >
}