1
我想解析一些任务,我只关心整个任务。不是关于任务内容的。分配由':='
表示。 (编辑:其他的事情可能会前和分配后,)ANTLR解析任务
一些例子:
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' ';'! ;
我试着用下面的替换,因为Eclipse的解释似乎并不喜欢((OPERATOR | NAME) & ~('case' | 'esac'))+ ';'! ;
因为'and'
的。
(~(OPERATOR | ~NAME | ('case' | 'esac')) |
~(~OPERATOR | NAME | ('case' | 'esac')) |
~(~OPERATOR | ~NAME | ('case' | 'esac'))) ';'!
但这不起作用。我得到
“的错误(139):/AntlrTutorial/src/foo/NusmvInput.g:78:5:补集是空| --->〜(〜运算符|〜名称|( '案件' |'esac')))EOC!;“
我该如何解析它?
我还没有完全理解词法和语法分析器的机制,所以这就是我要的^^工作。您的解决方案肯定给了我一些见解,谢谢。 –