[Language] Name = Pascal Extension = pas Keywords = and, array, as, asm, begin, case, class, const, constructor, destructor = dispinterface, div, do, downto, else, end, except, exports, file, finalization = finally, for, function, goto, if, implementation, in, inherited, initialization, interface = in, is, library, nil, not, object, of, or, out, packed = procedure, program, property, raise, randomize, record, repeat, resourcestring, set = string, then, to, try, type, unit, until, uses, var, while, with Conflicts = Case Sensitive = false Options = ; ======================================================= ; Literals ; ======================================================= [Types] Integer = integer Real = real Boolean = boolean String = string [Function ID] Convention = proper Normal = {Name} Conflict = {Name}_function [Variable ID] Convention = proper Normal = {Name} Conflict = {Name}_variable [String Literal] Text = '{Characters}' Replace Char 1 = ' Replace By 1 = '' [Boolean Literal] true = true false = false [Integer Literal] Text = {Integral} [Real Literal] Text = {Integral}.{Fractional} [Variable Access] Precedence = 100 Text = {Name} | ~subscript = {Name}[{Subscript}] | subscript ; ======================================================= ; Expressions ; ======================================================= ; Pascal precedence: (ONLY FOUR) ; 1. Comparison: =, <>, <, >, <=, >= ; 2. Addition & Or: +, -, or, xor ; 3. Multiply & And: *, /, mod, and ; 4. Not: not ; 100. Atom, paranthesis [Or] Precedence = 3 Needed 1 = 3 Needed 2 = 4 Text = {1} or {2} [And] Precedence = 3 Needed 1 = 3 Needed 2 = 4 Text = {1} and {2} [Equals] Precedence = 1 Needed 1 = 2 Needed 2 = 2 Text = {1} = {2} [Not Equals] Precedence = 1 Needed 1 = 2 Needed 2 = 2 Text = {1} <> {2} [Less Than] Precedence = 1 Needed 1 = 2 Needed 2 = 2 Text = {1} < {2} [Less Equal Than] Precedence = 1 Needed 1 = 2 Needed 2 = 2 Text = {1} <= {2} [Greater Than] Precedence = 1 Needed 1 = 2 Needed 2 = 2 Text = {1} > {2} [Greater Equal Than] Precedence = 1 Needed 1 = 2 Needed 2 = 2 Text = {1} >= {2} [Concatenate] Precedence = 2 Needed 1 = 2 | string-1 = 1 | ~string-1 Needed 2 = 3 | string-2 = 1 | ~string-2 Text = {1} + {2} | string-1, string-2 = FloatToStr({1}) + {2} | ~string-1, string-2 = {1} + FloatToStr({2}) | string-1, ~string-2 = FloatToStr({1}) + FloatToStr({2}) | ~string-1, ~string-2 [Add] Precedence = 2 Needed 1 = 2 Needed 2 = 3 Text = {1} + {2} [Subtract] Precedence = 2 Needed 1 = 2 Needed 2 = 3 Text = {1} - {2} [Multiply] Precedence = 3 Needed 1 = 3 Needed 2 = 4 Text = {1} * {2} [Divide] Precedence = 3 Needed 1 = 3 Needed 2 = 4 Text = {1} / {2} [Modulus] Precedence = 3 Needed 1 = 3 Needed 2 = 4 Text = {1} mod {2} [Power] Precedence = 100 Needed 1 = 1 Needed 2 = 1 Text = Power({1}, {2}) [Not] Precedence = 4 Needed 1 = 4 Text = Not {1} [Negate] Precedence = 4 Needed 1 = 4 Text = -{1} [Subexpression] Precedence = 100 Text = ({Expression}) ; ======================================================= ; Intrinsic Functions ; ======================================================= [Abs] Precedence = 100 Needed 1 = 1 Text = Abs({1}) [ArcCos] Precedence = 100 Needed 1 = 1 Text = ArcCos({1}) [ArcSin] Precedence = 100 Needed 1 = 1 Text = ArcSin({1}) [ArcTan] Precedence = 100 Needed 1 = 1 Text = ArcTan({1}) [Char] Precedence = 100 Needed 1 = 100 Needed 2 = 1 Text = {1}[{2}] [Cos] Precedence = 100 Needed 1 = 1 Text = Cos({1}) [Int] Precedence = 100 Needed 1 = 1 Text = Int({1}) [Len] Precedence = 100 Needed 1 = 1 Text = Length({1}) [Log] Precedence = 100 Needed 1 = 1 Text = Log({1}) [Log10] Precedence = 100 Needed 1 = 1 Text = Log10({1}) [Pi] Precedence = 100 Text = Pi [Random] Precedence = 100 Needed 1 = 1 Text = Random({1}) [Sin] Precedence = 100 Needed 1 = 1 Text = Sin({1}) [Sgn] Precedence = 100 Needed 1 = 1 Text = Sgn({1}) [Size] Precedence = 100 Needed 1 = 1 Text = Length({1}) [Sqrt] Precedence = 100 Needed 1 = 1 Text = Sqrt({1}) [Tan] Precedence = 100 Needed 1 = 1 Text = Tan({1}) [ToChar] Precedence = 100 Needed 1 = 1 Text = Chr({1}) [ToCode] Precedence = 100 Needed 1 = 1 Text = Ord({1}) [ToFixed] Precedence = 100 Needed 1 = 1 Needed 2 = 1 Text = ToFixed({1}, {2}) [ToInteger] Precedence = 100 Needed 1 = 1 Text = StrToInt({1}) [ToReal] Precedence = 100 Needed 1 = 1 Text = StrToFloat({1}) [ToString] Precedence = 100 Needed 1 = 1 Text = FloatToStr({1}) ; ======================================================= ; Function call ; ======================================================= [Function Call] Precedence = 100 Text = {name}({arguments}) [Argument] Separator = ,{space} Text = {expression} ; ======================================================= ; Program ; ======================================================= [Program] Text = program MyProgram; = uses Math, SysUtils; = | functions = {{ Headers } | functions = -->HEADERS | functions = -->FUNCTIONS = -->MAIN [Main] Text = | functions = {{ Main } | functions = var | declare = -->VARIABLES | declare | 1 = | declare = begin = randomize; {{Prepare the random number generator} | random | 1 = | random = -->BLOCK | | 1 = end. ; ======================================================= ; Function ; ======================================================= [Parameter] Separator = ,{space} Text = {name} : {type} | ~array = var {name} : array of {type} | array [Function] Block Extra = 1 | return = 0 | ~return Text = = procedure {name} ({parameters}); | ~return = var | ~return, declare = -->VARIABLES | ~return, declare | 1 = | ~return, declare = begin | ~return = -->BLOCK | ~return | 1 = end; | ~return = function {name} ({parameters}) : {type}; | return = var | return, declare = -->VARIABLES | return, declare | 1 = | return, declare = begin | return = -->BLOCK | return | 1 = | return | 1 = {name} := {return} | return | 1 = end; | return [Function Header] Text = procedure {name} ({parameters}); forward; | ~return = function {name} ({parameters}) : {type}; forward; | return ; ======================================================= ; Variable Header ; ======================================================= [Variable Header Name] Separator = ,{space} Text = {name} [Variable Header] Text = {variables} : array of {type}; | array = {variables} : {type}; | ~array ; ======================================================= ; Statements ; ======================================================= [Assign] Text = {Variable} := {Expression}; | ~last = {Variable} := {Expression} | last [Call] Text = {Name} ({Arguments}); | ~last = {Name} ({Arguments}) | last [Comment] Replace Char 1 = } Replace By 1 = Text = {{ {Text} } [Declare Name] Separator = ,{space} Text = {name} [Declare] Name Mode = Singular Text = SetLength({Name}, {Size}); | array, ~last = SetLength({Name}, {Size}) | array, last [Do] Text = repeat = begin = -->BLOCK | | 1 = end = until not ({condition}); | ~last = until not ({condition}) | last [For] Text = For {Variable} := {Start} to {End} do | ~step, inc = For {Variable} := {Start} downto {End} do | ~step, ~inc = begin | ~step = -->BLOCK | ~step | 1 = end; | ~step, ~last = end | ~step, last = {Variable} := {Start}; | step = while {Variable} <= {End} do | step, inc = while {Variable} >= {End} do | step, ~inc = begin | step = -->BLOCK | step | 1 = | step = {Variable} := {Variable} + {Step}; | step, inc = {Variable} := {Variable} - {Step}; | step, ~inc = end; | step, ~last = end | step, last [Input] Text = ReadLn({Variable}); | ~last = ReadLn({Variable}) | last [If] Text = if {condition} then = begin = -->TRUEBLOCK | | 1 = end | else = else | else = begin | else = -->FALSEBLOCK | else | 1 = end; | ~last = end | last [Output] Text = WriteLn({Expression}); | newline, ~last = Write({Expression}); | ~newline, ~last = WriteLn({Expression}) | newline, last = Write({Expression}) | ~newline, last [While] Text = while {condition} do = begin = -->BLOCK | | 1 = end; | ~last = end | last