📄 grammar.txt
字号:
// Command statement, entered at the ready prompt for single-line execution, or
// an actual command statement
CommandStatement:
(ProgramStatement | Command)
;
Command:
'LIST'['--'(Digit)*] |
'SAVE' |
'UNSAVE' |
'CATALOG' |
'NEW' |
'OLD' |
'SCRATCH' |
'RENAME' |
'HELP' |
'RUN' |
'QUIT'
;
// Program statement entered as part of the program listing
ProgramStatement:
[LineNumber] Statement
;
// Because of the non-uniform nature of Dartmouth BASIC,
// each type of statement requires its own grammar rules.
Statement:
LetStatement |
ReadStatement |
DataStatement |
PrintStatement |
GotoStatement |
IfThenStatement |
ForStatement |
NextStatement |
RemStatement |
DimStatement |
DefStatement |
GoSubStatement |
ReturnStatement |
'STOP' |
'END'
;
LetStatement:
'LET' Variable '=' Expression
;
ReadStatement:
'READ' VariableList
;
DataStatement:
'DATA' ExpressionList
;
PrintStatement:
'PRINT' LabelExpressionList
;
GotoStatement:
('GOTO' | 'GO TO') LineNumber
;
IfThenStatement:
'IF' Expression RelationalOperator Expression 'THEN' LineNumber
;
ForStatement:
'FOR' UnsubscriptedVariable '=' Expression 'TO' Expression ['STEP' Expression]
;
NextStatement:
'NEXT' UnsubscriptedVariable
;
// For the DEF statement, the expression must be stored literally
// and evaluated with each execution
DefStatement:
'DEF FN'('A'...'Z')'('UnsubscriptedVariable')' '=' Expression
;
GosubStatement:
'GOSUB' LineNumber
;
ReturnStatement:
'RETURN'
;
DimStatement:
'DIM' VariableList
;
RemStatement:
'REM' .*
;
LineNumber:
(Digit)*
;
String:
".*"
;
VariableList:
Variable ([',' Variable])*
;
ExpressionList:
Expression ([',' Expression])*
;
LabelExpression:
(String | Expression | String Expression)
;
LabelExpressionList:
LabelExpression ([',' LabelExpression])*
;
// Arithmetic
Expression:
SignedTerm (AdditionOperator Term)*
;
SignedTerm:
[AdditionOperator] Term
;
Term:
Factor (MultiplicativeOperator Factor)*
;
Factor:
(Identifier | Constant | '(' Expression ')') [ExponentiationOperator Factor]
;
ExponentationOperator
'^'
;
AdditionOperator:
'+' | '-'
;
MultiplicativeOperator:
'*' | '/'
;
RelationalOperator:
'>' | '>=' | '<' | '<=' | '=' | '<>'
;
Parenthesis:
'(' | ')'
;
Constant:
[(Digit)*][.](Digit)*[Exponent]
;
Exponent:
'E'[AdditionOperator](Digit)*
;
Identifier:
Function | Variable
;
Variable:
UnsubscriptedVariable | SubscriptedVariable
;
UnsubscriptedVariable:
('A' ... 'Z')[Digit]
;
SubscriptedVariable:
('A'...'Z') Parenthesis Expression[','Expression] Parenthesis
;
Digit:
'0'...'9'
;
Function:
FunctionIdentifier '(' Expression ')'
;
FunctionIdentifier:
'SIN' |
'COS' |
'TAN' |
'ATN' |
'EXP' |
'ABS' |
'LOG' |
'SQR' |
'RND' |
'INT' |
'FN'('A'...'Z')
;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -