나는 sableCC를 사용하고 있으며 C와 같은 조건을 허용하는 문법을 만들려고합니다. 괄호와 충돌하기 때문에 조건에 괄호를 추가하려고 할 때 오류가 발생합니다. 나는 표정을 가지고있다. 예 : 4 = 3 또는 x = 95 mod 5와 5 = 5를 허용하지만 괄호는 사용하지 않습니다. 또한 'not'문법 규칙이 맞지 않는 것처럼 느낍니다.조건 - 구문 문법 SableCC
Helpers
tab = 9;
cr = 13;
lf = 10;
sign = '+' | '-';
digit = ['0'..'9'];
lowercase = ['a'..'z'];
uppercase = ['A'..'Z'];
letter = lowercase | uppercase;
idletter = letter | '_';
idchar = letter | '_' | digit;
Tokens
number = [digit - '0'] digit*;
id = idletter idchar*;
plus = '+';
minus = '-';
times = '*';
div = 'div';
mod = 'mod';
equal = '=';
hash = '#';
greater = '>';
greateq = '>=';
less = '<';
lesseq = '<=';
not = 'not';
and = 'and';
or = 'or';
lparen = '(';
rparen = ')';
eol = cr | lf | cr lf;
blank = ' ' | tab;
Ignored Tokens
eol, blank;
Productions
program = compare*;
expr = {term} term
| {add} expr plus term
| {sub} expr minus term
;
term = {factor} factor
| {times} term times factor
| {div} term div factor
| {mod} term mod factor
;
factor = {number} number
| {id} id
| {expr} lparen expr rparen
;
compare = {cond} cond |
{gr}compare greater cond |
{gq}compare greateq cond |
{ls}compare less cond |
{lq}compare lesseq cond |
{eq}compare equal cond |
{not} not cond
;
cond = {expr} expr |
{and} cond and expr |
{or} cond or expr
;
는 전자 원할 때마다부터 잘못이 방법이 없습니다 xpression 파서도 조건을 받아 들일 수 있습니다. 예. 값 할당 : id = expr; 또는 @ 그것을 의미 론적 분석으로 처리해야합니까? –
@AlexF : 그것은 두 개의 조건이 표현식으로 사용되는 것을 보여주는 예제를 포함하여 C에 관한 저의 요점이었습니다. C와 같지 않으려면 다른 전략이 필요하지만 (링크 된 몇 가지 질문에 표시되어 있듯이) 줄이기 작업에서 의미 론적 검사를 사용하면 가장 쉬운 방법입니다. (C :-)와 같이하고 싶다고해서는 안된다.) – rici