我使用ANTLR和下面的語法:的QuickBasic語法使用ANTLR
grammar QuickBasic;
options
{
language = 'CSharp2';
output = AST;
}
parse
: block EOF
;
block
: (labelStatement | labeledStatement | statement)*
;
labelStatement
: label ':' -> ^(label)
;
labeledStatement
: label statement -> ^(label statement)
;
statement
: assignment
;
assignment
: IDENTIFIER '=' value -> ^('=' IDENTIFIER value)
;
value
: (IDENTIFIER | constant)
;
constant
: (STRING | INTEGER | REAL)
;
label
: (ALPHANUMERIC)+
;
IDENTIFIER
: LETTER (ALPHANUMERIC)*
;
REAL
: (INTEGER '.' NATURAL)
;
INTEGER
: ('-')? NATURAL
;
SPACE
: (' ' | '\t' | '\r' | '\n' | '\u000C') {Skip();}
;
STRING
: '"' ('""' | ~'"')* '"'
;
fragment NATURAL
: (DIGIT)+
;
fragment ALPHANUMERIC
: (DIGIT | LETTER)
;
fragment DIGIT
: '0'..'9'
;
fragment LETTER
: ('a'..'z' | 'A'..'Z')
;
有了這個,我試圖解析如下因素文件:
PI = 3.141592
CALC:
100 A = 1
接下來發生的事情是,行'CALC:'應該是一個標籤,但它試圖解析爲一個語句,並給我一個錯誤,說錯誤的輸入':'期待'='。
確切!感謝Bart! –
不客氣@JonathasCosta。 –