방금 DSL을 작성 중이며 JISON (http://zaach.github.io/jison)을 사용하려고합니다. 문법 구문을 배우려고하고 있는데 이중 따옴표로 문자열을 지정하는 문제가 있습니다.JISON에서 문자열을 정의하는 방법
내가 일하는 것이 생각하는 것입니다 : 아마도
%lex
%%
[\n\s]+ /* skip whitespace */
"true"|"false" return 'BOOL'
"IF" return 'START'
"AND"|"OR" return 'LOGIC'
<<EOF>> return 'EOF'
. return 'INVALID'
/lex
%start string
%%
string
: '"' [^"]+ '"'
{$$ = $2;}
;
... 나 :
%lex
%%
[\n\s]+ /* skip whitespace */
"true"|"false" return 'BOOL'
"IF" return 'START'
"AND"|"OR" return 'LOGIC'
\"[^"]+\" return 'STRING'
<<EOF>> return 'EOF'
. return 'INVALID'
/lex
%start string
%%
string
: STRING
{$$ = $1;}
;
이 첫 번째 (기본적으로) 두 번째는 좀 작동하는 동안, 전혀 작동하지 않습니다 ; 문자열을 찾을 때 나오는 값은 이스케이프 된 큰 따옴표를 포함합니다.
JISON/BISON/BNF 문법 정의를 학습하는 데 도움이되는 훌륭한 자료가 있습니까? 나는 주변을 둘러 보았지만 나를 돕는 것을 찾을 수 없었다. comp/sci 전공이 아닙니다. 나는 단순한 무언가 또는 더 충실한 무언가를 놓치고 있는가?
나는 간단한 조건을 구문 분석에 대한 간단한 DSL을 정의하는 것을 시도하고있다 : 어떤 상황에 대한
당신은 아마 따옴표 손질 할 필요가
IF Something > 100
AND Another == true
doAction 2.51
감사합니다. 나는'yytext.replace (/ \\ "/ g, '')'를 사용하여 일종의 시도를하고 있었지만 초기에는 작동하지 않았지만,이 바이슨/? 나는이 일을 조금 "해킹"한다고 느꼈지만, 그것이 어떻게 이루어지면 괜찮 았는가. – kalisjoshua
@kalisjoshua 나는 그것을하는 다른 방법을 모른다; 그것은 내가'flex '('flex'에서는 어쨌든'yytext'를 복사해야합니다. 그렇기 때문에 "hacky"라고 느낄 수도 있습니다 :)). – rici