首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何定义只对lexer令牌的一个分段不区分大小写?

如何定义只对lexer令牌的一个分段不区分大小写?
EN

Stack Overflow用户
提问于 2022-08-10 23:12:00
回答 2查看 31关注 0票数 0

是否有一种方法可以这样做,使案件敏感性不是一个“全部或无”的选择?

代码语言:javascript
复制
lexer grammar TestLexer;
options { caseInsensitive=true; } // ok, but it's not supported in the VS Code editor ??
BOOL: (TRUE|FALSE);

// I want these two keywords to be case-insensitive
TRUE:   'true'; // true, True, TRUE, ...
FALSE:  'false'; // false, False, FALSE, ...

options { caseInsensitive=false; } // ok, but it's not supported in the VS Code editor ??
// This keyword must only match exact case
YIELD:    'yield'; // 'yield' ONLY

如果没有,有什么可能做到这一点呢?我以前看到的--在我看来是最糟糕的选择--就是做这样的事情:

代码语言:javascript
复制
TRUE: T R U E  // case-insensitive
YIELD: 'yield' // case-sensitive
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-11 01:39:09

基于文档这里,您似乎可以根据规则设置caseInsensitivity。

给出的例子如下:

代码语言:javascript
复制
options { caseInsensitive=true; }
STRING options { caseInsensitive=false; } : 'N'? '\'' (~'\'' | '\'\'')* '\''; // lower n is not allowed
票数 1
EN

Stack Overflow用户

发布于 2022-08-11 19:06:43

从迈克的回答来看,这是对我有用的:

代码语言:javascript
复制
lexer grammar TestLexer;
options { caseInsensitive=true; }
BOOL: (TRUE|FALSE);

// I want these two keywords to be case-insensitive
TRUE:   'true';
FALSE:  'false';

// This keyword must only match exact case
YIELD options { caseInsensitive=false; }: 'yield';
代码语言:javascript
复制
parser grammar TestParser;
options { tokenVocab = TestLexer; }

program
    : statement EOF
    ;

statement
    : YIELD SPACE BOOL
    ;

换句话说,将options设置在顶部使其成为默认设置,除非它通过使用表单来覆盖特定的令牌:

代码语言:javascript
复制
TOKEN opens { caseInsensitive=true|false; }
    : VALUE
    ;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73313658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档