0

我正在使用 antlr 2.7.4 创建词法分析器。我被困在以下情况:

  • 如果冒号 (':') 后跟 C1 类中的字符,则应发出冒号令牌,后跟令牌 C1

  • 如果冒号后面是字符类 C2 中的字符,则冒号应作为 C2 的一部分并应发出标记 C2。

假设 C1 类是 {1,2,3} 并且 C2 类是 {A,B,C} 那么 :13 应该标记为 COLON 后跟 C1。但是 :AB 应该被标记为 C2。

更具体地说,我有一种语言的语法,它有两种结构:

  • Identifier : Type // 它有三个标记: IDENT COLON IDENT 。类似 Pascall 的类型注解
  • :: // 这是一个标识符。有一类字符可以用作标识符。冒号可以用作标识符,前提是它与类的其他字符一起使用

一些例子:

  • myvar : Int // IDENT 冒号 IDENT
  • :: // 标识
  • :$ // 标识
  • &:& // 标识

一个后续问题:是否可以检查某个前瞻字符是否属于某个 Token 类?任何建议将不胜感激。

编辑

我想我是 antlrv2 的唯一用户。我很高兴在 antlrv3 中有一个解决方案,看看我是否可以在 antlrv2 中破解它。

4

0 回答 0