C++ 与switch语句C++;
我正在尝试编写一个正则表达式模式,用于bash脚本,该脚本检查C++ 与switch语句C++;,c++,regex,C++,Regex,我正在尝试编写一个正则表达式模式,用于bash脚本,该脚本检查switch语句(C++)的语法 我想遵循的switch语句的语法如下 switch(expression) { case constant-expression: statement(s); break; // must be present case constant-expression: statement(s); break; // must be pres
switch
语句(C++)的语法
我想遵循的switch
语句的语法如下
switch(expression)
{
case constant-expression:
statement(s);
break; // must be present
case constant-expression:
statement(s);
break; // must be present
....
....
default : // must be present
statement(s);
break; // must be present
}
请注意,尽管break
和default
语句不是必须的,但我希望检查它们是否存在
我编写了这个正则表达式模式来匹配开关块
switch(.*)\n(\s)*?{(\n(.*))*?(\n(\s)*)case(.*):?(\n(.*))*?break;)+(\n(.*))?\n(\s)*(默认值:)(\n(\s)**)(break | return(.*);(\n(\s)*(.*))}
它成功地匹配了开关块,但问题是它匹配了开关
块,即使缺少break和default语句。我尝试将+
操作符与break
和default
单词一起使用,但它们似乎不起作用
编辑更新:
是否可以使用解析器匹配如下开关块
switch (PC_INT[address.port][address.pin])
{
#if defined (__AVR_ATmega2560__) || defined(__AVR_AT90CAN128__)
case EINT_0:
// Mask the interrupt so it doesn't fire anymore, i.e put a zero in the mask register.
EIMSK &= ~(1 << INT0);
break;
case EINT_1:
EIMSK &= ~(1 << INT1);
break;
....
default:
return GPIO_INT_OUT_OF_RANGE;
#elif defined(__AVR_ATmega64M1__) || defined(__AVR_ATmega64C1__)
case EINT_0:
// Mask the interrupt so it doesn't fire anymore, i.e put a zero in the mask register.
EIMSK &= ~(1 << INT0);
break;
case EINT_1:
EIMSK &= ~(1 << INT1);
break;
....
default:
return GPIO_INT_OUT_OF_RANGE;
#else
#error "GPIO interrupts not implemented for this configuration."
#endif
}
交换机(PC_INT[address.port][address.pin])
{
#如果已定义(uu AVR_ATmega2560_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
案例编号0:
//屏蔽中断,使其不再触发,即在屏蔽寄存器中输入零。
EIMSK&=~(1非贪婪模式(如*?
)不是魔法
显然,您期望中的*?
(\非贪婪模式(如*?
)不是魔法
<>你显然希望<代码> >代码> >代码>(正则表达式不能匹配实际的或甚至非常简化的C++语法)。正则表达式不能匹配实际的或甚至非常简化的C++语法。
case 1:
do_something();
case 2:
do_something_else();
break;
(default:)?