我想解析一些作业,我只关心整个作业。不是关于任务中的内容。分配由 表示':='
。(编辑:在分配之前和之后其他事情可能会发生)
一些例子:
a := TRUE & FALSE;
c := a ? 3 : 5;
b := case
a : 1;
!a : 0;
esac;
目前,我对包含“案例”的作业和其他作业进行了区分。对于简单的任务,我尝试了类似的东西,~('case' | 'esac' | ';')
但随后 antlr 抱怨不匹配的令牌(如'='
)。
assignment :
NAME ':='! expression ;
expression :
( simple_expression | case_expression) ;
simple_expression :
((OPERATOR | NAME) & ~('case' | 'esac'))+ ';'! ;
case_expression :
'case' .+ 'esac' ';'! ;
((OPERATOR | NAME) & ~('case' | 'esac'))+ ';'! ;
我尝试用以下内容替换,因为eclipse-interpreter 似乎不喜欢'and'
.
(~(OPERATOR | ~NAME | ('case' | 'esac')) |
~(~OPERATOR | NAME | ('case' | 'esac')) |
~(~OPERATOR | ~NAME | ('case' | 'esac'))) ';'!
但这不起作用。我明白了
“错误(139):/AntlrTutorial/src/foo/NusmvInput.g:78:5:设置补码为空|--->〜(〜OPERATOR |〜NAME |('case'|'esac')))EOC !;"
我该如何解析它?